종료 할 때 매크로가 실행되도록하는 mac 문서의 2011 보호 텍스트에 텍스트 양식 필드가 있습니다. 매크로는 양식을 다양한 정보로 채우지 만이 특정 양식 필드에 입력 된 테스트에 종속되지 않습니다. 이 문제를 해결하기위한 두 가지 아이디어가 있습니다. 첫 번째 옵션은 수행이 가능할 때 가장 좋으며, 그렇지 않으면 두 번째 옵션은 합리적인 해결 방법입니다. 누군가가 다음 중 하나를 수행하는 매크로를 찾도록 도와 줄 수 있습니까?이미 실행 된 매크로를 건너 뛰는 VBA 매크로
a. 양식 필드를 다시 입력하고 편집하면 매크로가 다시 실행되지 않습니까?
b. 이미 필드에 텍스트가있는 경우 양식 필드 입력시 확인하고, 존재할 경우 편집 후 exit 매크로를 다시 실행하지 않고 다음 양식 필드로 이동합니다.
저는 VBA에 새롭기도하지만, 저는 기본에 대해 잘 알고 있다고 생각합니다. 여기에 내가 무엇을 가지고 왔느냐? 솔루션이지만 작동하지 않습니다.
"text9"라는 양식 필드 이름에 텍스트가 있는지 확인하는 매크로가있는 경우 해당 텍스트의 보호를 해제하고 "text10"책갈피에 가서 양식을 보호하십시오. 그렇지 않으면 사용자가 양식 필드를 채우고 종료 할 때 매크로를 실행할 수 있습니다.
Sub TestSkipField()
'
' TestSkipField Macro
'
'
With GetCurrentFF
If Len(.Result) = Null Then
End If
Else
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.UnProtect
End If
Selection.GoTo What:=wdGoToBookmark, Name:="Text10"
With ActiveDocument.Bookmarks
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
End If
End With
End Sub
감사합니다. Matteo,이 시도했지만 양식 필드를 편집 할 경우 매크로 여전히 두 번째 실행됩니다. 여기 내가 한 일이있다. 어쩌면 내가 실수 한거야? 새로운 모듈 (Module2)을 생성하고 다음과 같이 코드를 입력했습니다. 부울, 부제 myMacro(), hasRun = False이면 (내 물건), hasRun = True, End If, End Sub와 같이 Dim hasRun을 입력하십시오. 그런 다음 양식 필드를 종료 할 때 모듈이 실행되도록 설정합니다. 그러나 양식 필드를 다시 입력하면 module2가 계속 실행됩니다. – BHW
방금 다음과 같이 전역 변수로 변경하여 작동하도록했습니다. 전역 hasRun을 부울로 사용. 정말 고맙습니다!! – BHW
이제 또 다른 질문입니다. 위의 해결 방법은 훌륭합니다. 그러나 hasRun을 False로 재설정하려면 다음 문서에서 단어를 종료하고 템플릿을 다시 열어야합니다. 문서를 닫을 때 hasRun을 false로 다시 설정하려면 어떻게해야합니까? 그래서 새 문서를 열면 매크로가 다시 정상적으로 실행됩니까? 나는 개인 하위 Document_Close()에서 실행하기 위해 hasRun = False scrip을 삽입하려고했지만 아무 것도하지 않습니다. – BHW