我在第一个sub里使用了数组和字典,但是程序调用其他的Function和Sub时,会失去这个变量。
不太熟悉这里面的机制
VBA 如何让单个变量在不同的Sub或者Function中使用?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- teellyy 2023-04-12 10:56关注
要让一个变量在不同的Sub或者Function中使用,可以将其定义为模块级别的变量,也就是在模块(module)中定义这个变量。这样,在整个模块中,这个变量都可以被访问和使用。
具体实现步骤如下:
1.打开 Visual Basic 编辑器(VBE),选择要定义该变量的模块。
2.在模块的顶部声明该变量,并指定其数据类型,如下所示:
Dim myVar As Integer
这里我们声明了一个名为 myVar 的整型变量。
3.现在,无论在哪个 Sub 或 Function 中,都可以通过使用这个变量名来访问这个变量,如下所示:
Sub subroutine1()
' 使用 myVar
MsgBox myVar
End Sub
Function function1() As Integer
' 修改 myVar
myVar = 10
' 返回新值
function1 = myVar
End Function
注意,如果在 Sub 或 Function 中重新声明该变量,那么这个变量就会成为局部变量,只能在这个 Sub 或 Function 中使用,而无法在其他 Sub 或 Function 中使用。因此,为了确保模块级别的变量在整个模块中可用,请不要在任何 Sub 或 Function 中重复声明它。在 VBA 中,每个 Sub 和 Function 都拥有自己的作用域,也就是说,它们可以访问和使用在它们内部或者所属模块级别的变量。此外,当一个 Sub 或者 Function 调用另一个 Sub 或者 Function 时,被调用的 Sub 或者 Function 可以访问和使用所有在调用方(即调用它的 Sub 或者 Function)作用域上(包括该 Sub 或者 Function 中定义的变量)定义的变量。
然而,当你在一个 Sub 中创建一个数组或者字典,并尝试在后续的 Sub 或者 Function 中使用它,可能会因为变量作用域的限制而无法访问到这些变量。这是因为数组和字典对象并不是基本类型的数据,而是对象,只有它们的引用才能共享给其他 Sub 和 Function 使用。
为了解决这个问题,你可以将数组或者字典对象定义为 Public 变量。这样,这些变量的作用域将变成整个项目级别的,而不是仅限于某个 Sub 或者 Function,从而其他的 Sub 和 Function 就可以直接访问这些变量了。
具体实现方法如下:
1.在模块的顶部,声明需要在不同的 Sub 和 Function 中使用的数组或字典对象,如下所示:
Public myArray() As Integer
Public myDictionary As Object
这里我们声明了一个名为 myArray 的整型数组和一个名为 myDictionary 的字典对象。
2.在某个需要使用这些变量的 Sub 或者 Function 中,引用这些变量并进行操作,如下所示:
Sub subroutine1()
ReDim myArray(10) ' 初始化 myArray
myDictionary.Add "a", 1 ' 添加键值对到 myDictionary
Call subroutine2 ' 调用另一个 Sub
End Sub
Sub subroutine2()
Dim i As Integer
For i = LBound(myArray) To UBound(myArray)
Debug.Print myArray(i) ' 访问 myArray 中的元素
Next i
Debug.Print myDictionary("a") ' 访问 myDictionary 中的值
End Sub
这样,你就可以在不同的 Sub 和 Function 中共享和操作这些数组或者字典对象了。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥170 如图所示配置eNSP
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效
- ¥15 悬赏!微信开发者工具报错,求帮改
- ¥20 wireshark抓不到vlan
- ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
- ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
- ¥15 stata安慰剂检验作图但是真实值不出现在图上
- ¥15 c程序不知道为什么得不到结果
- ¥15 键盘指令混乱情况下的启动盘系统重装