试图将变量名传递给SUB,然后在SUB中更新变量的值,但我做错了。
我有一个全局变量
Dim booLastNm as Boolean
我有一个功能
Public Sub FilltheForm(myCTL As Control, intNum As Integer, Optional booName As String)
myCTL.Value = myArray(1, intNum)
If booName <> "" Then booName = True
MsgBox booName & vbCrLf & vbCrLf & booLastNm
End Sub
我在组合框更改例程中调用该函数:
FilltheForm Me.boxLastNm, 1, "booLastNm"
它可以从myArray(1,1)正确更改用户窗体字段“ Me.boxLastNm”。我还希望将全局变量“ booLastNm”的值设置为True。但是,“ booName”的值设置为True,而“ booLastNm”的值设置为“ False”。如何将要更改的变量的名称(在本例中为“ booLastNm”)传递给函数,以便更改值而不是变量“ booName”?我从Excel电子表格中读取了大约148个变量,并试图将它们转储到多页用户表单中以进行数据验证。 “ boo”变量是我在页面更改时检查的布尔变量;如果将选定的布尔变量设置为false,我希望用户在进入下一页之前先对当前页面进行更正。
答案 0 :(得分:0)
通过引用传递。
Public Sub FilltheForm(myCTL As Control, intNum As Integer, Optional ByRef booName As String)
但是,在您的示例中,您同时使用booName
作为Boolean
和String
(上面的函数签名是您的副本)。此外,您无需将任何内容重新分配给BooLastNm
,这就是为什么它没有变化的原因。
如果您通过ByRef
,则值得使用Variant
进行签出,因此您也可以使用IsMissing()
在UDF中提供一些灵活性。在这种情况下可能无关紧要,但是学习东西总是很方便。