VBA全局变量值在其他子中消失

时间:2013-05-08 17:15:23

标签: vba ms-access

我有一个名为flag设置的全局变量。我可以从我的代码中的每个模块访问标志,但是当我在Sub Command97_Click()中为其分配值1时,由于某种原因,标志不会将值保留为Sub Form_BeforeUpdate(取消为整数)。当我在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

2 个答案:

答案 0 :(得分:2)

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

Take a look here for an explanation of scopes.

答案 1 :(得分:0)

在所有模块中搜索“公共标志”和“全局标志”,也许您有两次变量名称 如果在它之前设置模块名称,则可以区分不同标准模块中的两个同名变量:

Module1.flag = 1
Module2.flag = 1

并在表单模块中使用

Me.flag = 1

确保您目前使用哪个旗帜。