返回代码(VBA)时,公共值不更新
Posted
技术标签:
【中文标题】返回代码(VBA)时,公共值不更新【英文标题】:Public value does not updated when going back to code (VBA) 【发布时间】:2020-01-08 11:33:29 【问题描述】:当 Form 关闭并且代码导航回宏时,公共变量没有更新。
我创建的表单只有两个按钮“是”和“否”。当用户单击“否”时,我希望将变量设置为 false,如果“是”,它将为 true。
这是工作表代码
Public bool As Boolean
Sub test2()
Claims.Show
If bool = True Then
Range("A1") = "Yes"
ElseIf bool = False Then
Range("A1") = "No"
Else
Range("A1") = "Nothing"
End If
End Sub
在我想要一个值的表单下方
Priate Sub No_Click()
bool = False
Unload Me
End Sub
Private Sub Yes_Click()
bool = True
Unload Me
End Sub
【问题讨论】:
@Dorian 否,但公共变量必须在模块中而不是在工作表代码中才能在所有模块中全局可用。如果它在一个模块中,则可以使用 all 个模块。 您的所有模块中都有Option Explicit
吗?这会有所帮助。
那是Pirate Sub
吗?我想你拼错了Private
那你应该添加它....
不确定你到底想要做什么,但绝对考虑使用参数而不是可变全局状态 - 未来你提前感谢你 ;-) 见 this article (免责声明:我写的)了解更多使用模态表单和对话框的可靠方法。
【参考方案1】:
在不在ThisWorkbook
的模块中声明变量。
Public bool As Boolean 'in a module
那么Test2
的过程就可以在ThisWorkbook
:
Sub test2()
Claims.Show
If bool Then
Range("A1") = "Yes"
Else
Range("A1") = "No"
End If
End Sub
注意bool
只能是True
或False
没有3ʳᵈ 选项。所以可以减少。另请注意,您应该为ThisWorkbook.Worksheets("Sheet1").Range("A1") = "Yes"
等范围指定工作表,否则 Excel 将使用哪个工作表处于活动状态。
你想把按钮放在哪里的程序
Private Sub No_Click()
bool = False
Unload Me
End Sub
Private Sub Yes_Click()
bool = True
Unload Me
End Sub
我建议始终激活Option Explicit
:在 VBA 编辑器中转到 工具 › 选项 › Require Variable Declaration。这会产生一个警告来防止这个问题。
【讨论】:
是否值得一提全局变量的适当语法?例如,您在模块gvar
中有Public blah
,然后在引用时您将编写gvar.blah
。如果不使用 Option Explicit
,从技术上讲,您可以使用特定于当前模块的 new 变量。
@Cyril 你可以测试它,但我相信如果Option Explicit
关闭并且你在模块中声明一个公共变量,它将始终使用声明的变量而不是生成一个本地新变量。跨度>
这是真的.
@MathieuGuindon 嗯,这是真的。完全排位赛总是一个好主意:)
@Pᴇʜ 我测试过,它确实可以识别没有模块限定的通用公共变量 (blah
)。值得一提的是,您可以在每个模块中拥有同名的公共变量,因此您需要适当地限定。 Public blah as string
在一个模块中,Public blah as long
在另一个模块中......在尝试破译另一个人的密码时是有趣的一天。以上是关于返回代码(VBA)时,公共值不更新的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA 类属性返回公共长变量,但不是公共字符串变量