VBA Excel将变量名称传递给子对象;更新子中变量名的值

时间:2018-08-14 02:31:26

标签: vba excel-vba

试图将变量名传递给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,我希望用户在进入下一页之前先对当前页面进行更正。

1 个答案:

答案 0 :(得分:0)

通过引用传递。

Public Sub FilltheForm(myCTL As Control, intNum As Integer, Optional ByRef booName As String)

但是,在您的示例中,您同时使用booName作为BooleanString(上面的函数签名是您的副本)。此外,您无需将任何内容重新分配给BooLastNm,这就是为什么它没有变化的原因。

如果您通过ByRef,则值得使用Variant进行签出,因此您也可以使用IsMissing()在UDF中提供一些灵活性。在这种情况下可能无关紧要,但是学习东西总是很方便。