VBA宏跳过已经运行的宏

时间:2015-01-17 17:12:16

标签: vba field skip

我在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

1 个答案:

答案 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。