我在mac文档的受保护字2011中有一个文本表单字段,触发宏在退出时运行。宏使用各种信息填充表单,但不依赖于输入此特定表单字段的测试。我有两个想法来解决这个问题。第一种选择是最好的,如果可以做到,否则第二种选择是合理的解决方案。有人可以帮助找到一个执行以下操作之一的宏吗?
一个。如果再次输入表单字段并进行编辑,是否会阻止宏再次运行?
湾检查输入表单字段,如果字段中已有文本,如果有,则阻止编辑并移动到下一个表单字段而不再运行退出宏?
我对VBA很新,但我认为我掌握了基础知识。这是我为b提出的。解决方案,但它不起作用。
一个宏,用于检查表单字段名称“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
答案 0 :(得分:1)
我认为解决问题的最简单方法是使用一个全局变量来回答问题&#34;宏已经运行了吗?&#34;。
让我们说你有一个如下的宏:
Sub myMacro()
'your stuff here
End Sub
您不希望此宏运行两次。然后,您可以在模块顶部定义一个全局变量:
Dim hasRun As Boolean 'this will be False by default
Sub myMacro()
'your stuff here
End Sub
Sub myOtherMacro()
'some other stuff here
End Sub
'etc.
然后在你的宏中嵌入支票:
Sub myMacro()
If hasRun = False Then 'if hasRun is still False, it means we never ran this code yet
'do your stuff here
hasRun = True 'set hasRun = True, so from now we know that this code has already been executed once
End If
End Sub
这应该允许您不要更改代码的结构或执行数据检查,但同时只执行宏一次。您可以按照这个方向详细说明执行条件:仅在发生某些事情时执行它两次
请注意:您最好在宏代码的最后设置hasRun = True
,以确保值hasRun
不会是如果执行没有到达所需代码的结尾,则为True。