vba - 如何使Excel VBA变量可用于多个宏?

标签 vba excel

我有一串相互调用并引用工作簿 A 和 B 的宏。我希望第一个宏提示用户选择文档 A 和 B,并将这些选择变成我引用的工作簿 A 和 B 变量到各种宏中。

如何使所选文档成为所有宏中引用的变量?

提前致谢!

最佳答案

在子例程之外声明它们,如下所示:

Public wbA as Workbook
Public wbB as Workbook
Sub MySubRoutine()
    Set wbA = Workbooks.Open("C:\file.xlsx")
    Set wbB = Workbooks.Open("C:\file2.xlsx")
    OtherSubRoutine
End Sub
Sub OtherSubRoutine()
    MsgBox wbA.Name, vbInformation
End Sub

或者,您可以在子例程之间传递变量:

Sub MySubRoutine()
Dim wbA as Workbook
Dim wbB as Workbook
    Set wbA = Workbooks.Open("C:\file.xlsx")
    Set wbB = Workbooks.Open("C:\file2.xlsx")
    OtherSubRoutine wbA, wbB
End Sub
Sub OtherSubRoutine(wb1 as Workbook, wb2 as Workbook)
    MsgBox wb1.Name, vbInformation
    MsgBox wb2.Name, vbInformation
End Sub

或者使用函数返回值:

Sub MySubroutine()
    Dim i as Long
    i = MyFunction()
    MsgBox i
End Sub
Function MyFunction()
    'Lots of code that does something
    Dim x As Integer, y as Double
    For x = 1 to 1000
        'Lots of code that does something
    Next
    MyFunction = y
End Function

在第二种方法中,在 OtherSubRoutine 范围内,您可以通过参数名称 wb1wb2 来引用它们。传递的变量不需要使用相同的名称,只需使用相同的变量类型即可。这允许您有一定的自由度,例如您可以循环多个工作簿,并且可以将每个工作簿发送到子例程以对该工作簿执行某些操作,而无需创建所有(或任何)变量范围内公开。

关于用户表单的注释

我个人建议在所有模块和表单中保留 Option Explicit(这可以防止您实例化名称中带有拼写错误的变量,例如lCoutn 当您指的是 lCount 等时,除其他原因外)。

如果您使用Option Explicit(您应该),那么您应该限定模块范围的变量的样式并避免歧义,并且您必须限定用户形式的公共(public)作用域变量,因为这些变量不是同一意义上的“公共(public)”。例如,i 未定义,尽管它在 UserForm1 范围内是 Public:

enter image description here

您可以将其称为UserForm1.i以避免编译错误,或者由于表单是New-able的,您可以创建一个变量对象来包含对您的表单,并以这种方式引用它:

enter image description here

注意:在上面的屏幕截图中,x 在另一个标准代码模块中被声明为 Public x as Long,并且不会引发编译错误。最好将其称为 Module2.x 以避免重复使用变量名称时出现歧义和可能的阴影...

关于vba - 如何使Excel VBA变量可用于多个宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16374253/

相关文章:

excel - VBA中CDate函数的问题

vba - SQL 中连接的字符串变量(以 Access 数据库),由于引号导致的语法错误?

excel - 使用 VBA 搜索特定的 headers 名称,并将这些 headers 的数据分组在几个重命名列中

VBA:将日期格式化为美国标准

Excel 在索引列表中查找最大的部分值

excel - 如何根据文本值在工作表之间复制行

VBA : Remove know password from multiple documents (improve code)

excel - 2 个 'On Error goto ' 语句中的第二个语句被忽略

excel - 计算每个客户多次输入的总停留时间

vba - 总和最大但小于特定值的子集