gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:19:44 25 4
gpt4 key购买 nike

我有一串相互调用并引用工作簿 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com