首页 > 解决方案 > VBA Excel 将变量名传递给子;更新 sub 中变量名的值

问题描述

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

标签: vbaexcel

解决方案


通过参考。

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

但是,在您的示例中,您同时使用booNameaBoolean和 a String(上面的函数签名是您的副本)。此外,您不会将任何内容重新分配给BooLastNm,这就是它没有改变的原因。

如果您正在通过ByRef,值得使用 a 进行检查Variant,这样您也可以使用IsMissing()UDF 来提供一些灵活性。在这种情况下可能不相关,但学习东西总是很方便。


推荐阅读