下面是一个问题,我会回答我自己,但它造成的挫折很大,我和我有很多的麻烦在网络上寻找它,所以我在这里张贴在节省其他一些时间和精力的希望,也许我自己,如果我在未来忘记这一点:
对于VBA(在我的情况,MS Excel中),在Public
声明,应该把这些变量(或功能)在全球范围由该模块在其他函数或子程序中的任何其他模块访问,以及。
原来,这是不正确的,在案件Forms
,我也怀疑在Sheets
,但我还没有证实了后者。
总之, 下面将不会创建一个公开,在创建时访问变量 Form
,因此会崩溃,说bYesNo和DRATE变量mModule1是不确定的:
(inside fMyForm)
Public bYesNo As Boolean`
Public dRate As Double
Private Sub SetVals()
bYesNo = Me.cbShouldIHaveADrink.value
dRate = CDec(Me.tbHowManyPerHour.value)
End Sub
(Presume the textbox & checkbox are defined in the form)
(inside mModule1)
Private Sub PrintVals()
Debug.Print CStr(bYesNo)
Debug.Print CStr(dRate)
End Sub
但是,如果你让下面的轻微变化,这一切都将正常工作:
(inside fMyForm)
Private Sub SetVals()
bYesNo = Me.cbShouldIHaveADrink.value
dRate = CDec(Me.tbHowManyPerHour.value)
End Sub
(Presume the textbox & checkbox are defined in the form)
(inside mModule1)
Public bYesNo As Boolean`
Public dRate As Double
Private Sub PrintVals()
Debug.Print CStr(bYesNo)
Debug.Print CStr(dRate)
End Sub
mModule1
将工作完全正常,并假设fMyForm总是先调用,然后由时间PrintVals
程序运行,从形式的文本框和复选框值将适当地捕获。
老实说,我不可能参透MS与这种变化的思维,但缺乏一致性是一个巨大的吮吸效率,学习idiosyncracies喜欢这些,这都记录如此糟糕,2013年谷歌搜索的东西,可能已经存在了十年或更长时间如此具有挑战性的搜索。