Vba 为什么布尔值会恢复为原始值?

Vba 为什么布尔值会恢复为原始值?,vba,vb6,boolean,Vba,Vb6,Boolean,我知道这可能是一个更一般的问题,但我已经把我的代码看了100遍,不确定哪里出了问题。我设置了一个全局标志,以便可以在我的应用程序的不同形式中使用它 Dim OverPopulated as Boolean 我有一个函数,我首先将它设置为FALSE,在它经过一些验证之后,它被设置为TRUE 现在我做了很多事情,经历了不同的形式,价值始终保持正确。基本上我需要另一个表单的这个值,所以当我检查 if OverPopulated = false then MsgBox "You Can't do

我知道这可能是一个更一般的问题,但我已经把我的代码看了100遍,不确定哪里出了问题。我设置了一个全局标志,以便可以在我的应用程序的不同形式中使用它

Dim OverPopulated as Boolean
我有一个函数,我首先将它设置为FALSE,在它经过一些验证之后,它被设置为TRUE

现在我做了很多事情,经历了不同的形式,价值始终保持正确。基本上我需要另一个表单的这个值,所以当我检查

if OverPopulated = false then
   MsgBox "You Can't do this and that"
   exit sub
End if
然后它突然被设置为FALSE。我已经检查了我的应用程序中的每一个人口过多的实例,并为其设置了一个断点,以确保没有任何地方可以将其设置为FALSE,除了在验证之前有一次我将其设置为FALSE

我的申请表中只有另外两种形式。有一个地方,该标志在同一语句中运行了两次(与上面的一样)。第一次通过时,值是正确的,然后再次通过,值设置为FALSE

有什么想法吗?如果这是太模糊,请让我知道,我会尝试编辑它

编辑:我删除了很多代码,但下面是它的外观

Dim OverPopulated as Boolean
“模块化水平”

Private Sub ValidatePopulation()

Dim admDate as date

OverPopulated = False

admDate = Format(Now(), "mm/dd/yyyy")


Select Case revPURP
    Case 0, 1, 2
    'Check make sure these fields 
    'some if statements, checking, validation

    Case Else ' no need to do a 
End Select

OverPopulated = True 'I MAKE SURE IT GETS HERE and is set to TRUE!!!

End sub
现在,在其他函数中,我像这样使用它

If OverPopulated = False Then
    If optStat (0).Value = True Or optStat (1).Value = True Then
        MsgBox "You are not able to do this”, vbCritical, "Incorrect review status...."
        TabPop.Tab = 6
    End If
    Exit sub
Else
    'Proceed with SAVE
End If

所以我有这个。我在别的地方有另一个类似的陈述。这个被击中两次。我第一次逐行检查它是FALSE,然后第二次检查该值是TRUE。

看起来由于某种原因,该值被重置为FALSE。我从我的表单代码中取出了作为布尔值的Dim-OverPopulated,并将其放在一个全局模块中,所有其他全局变量都存储在该模块中。这似乎解决了我在应用程序中制造时值保持不变的问题。谢谢你的评论

Global OverPopulated as Boolean 

无论如何,VB6有一个奇妙的特性,当变量值发生变化时,可以设置断点。这很方便找到它在哪里/什么时候/为什么会发生变化。包含
的代码是否太大而无法在这里发布?代码在哪里?它是在一个类、一个模块中吗?您的两段代码是否在同一个源文件中?确保在所有源文件的顶部声明了
Option Explicit
。我想知道在本地标注它是否覆盖了全局dim。如果你把
模糊的人口过多作为布尔值
放在你原来的
全局人口过多作为布尔值
,那会怎么样?@Matt:那么我想我们都在怀疑同一件事:不管怎样,OP实际上使用了两个不同的
人口过多
变量。啊。我以为你说它已经在一个模块中而不是形式中了!