0

我设置了一个名为 flag 的全局变量。我可以从代码中的每个模块访问标志,但是当我在 Sub Command97_Click() 中为其分配值 1 时,由于某种原因标志不会将值保留为 Sub Form_BeforeUpdate(Cancel As Integer)。当我在 Sub Form_BeforeUpdate 中打印标志时,它不再等于 1。我知道这很愚蠢,但我是 vba 的新手......

请记住,我的代码不仅仅如此,但我只保留我的问题的基本内容。

提前致谢!

Public flag As Integer

Private Sub Command97_Click()
    flag = 1
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If flag = 1 Then
         DoCmd.RunCommand acCmdUndo
         MsgBox "Flag = " & flag, vbInformation
         Exit Sub
    End If
End Sub
4

2 回答 2

2

我怀疑你有一个变量范围问题。这取决于您的标志变量的定义位置,以及其他地方是否有其他名称相同的变量。
如果您说Public flag as Integer在表单模块的顶部,那么它并不是真正的全局。

在这里查看范围的解释。

于 2013-05-08T18:29:56.830 回答
0

在所有模块中搜索“public flag”和“global flag”,也许你有两次这个变量名。
如果在它之前设置模块名称,则可以区分不同标准模块中的两个同名变量:

Module1.flag = 1
Module2.flag = 1

并在表单模块中使用

Me.flag = 1

以确保您目前使用哪个标志。

于 2013-05-08T19:24:07.953 回答