You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA数组元素赋值疑问:修改原变量为何不影响数组内元素?

VBA自定义Type赋值数组后修改原变量不影响数组元素的原因

你定义的User是自定义值类型(UDT),而非引用类型的对象,这是问题的核心:

  • VBA中值类型的赋值逻辑是复制完整数据副本:当执行userList(0) = user1时,VBA会把user1里的所有字段值(firstName="Tom"、lastName="Hanks")完整复制到userList(0)的独立内存区域,两者从此是完全无关的两个数据实体。
  • 后续修改user1.lastName = "Cruise",只会改变user1自身内存里的字段值,不会对userList(0)的内存区域产生任何影响,所以数组元素的lastName不会跟着变化。

如果想要实现修改原变量后数组元素同步变化的效果,需要改用类模块(引用类型):

  1. 插入类模块,命名为clsUser,在类中编写代码:
Public firstName As String
Public lastName As String
  1. 修改测试代码(引用类型需用New创建实例,Set赋值):
Sub test()
    Dim userList(1) As clsUser
    Dim user1 As clsUser
    Set user1 = New clsUser
    user1.firstName = "Tom"
    user1.lastName = "Hanks"
    
    Set userList(0) = user1
    Debug.Print "0 userList(0).firstName=" & userList(0).firstName & " userList(0).lastName=" & userList(0).lastName
    user1.lastName = "Cruise"
    Debug.Print "1 userList(0).firstName=" & userList(0).firstName & " userList(0).lastName=" & userList(0).lastName
End Sub

此时运行代码,数组元素的lastName会同步变为Cruise,因为userList(0)和user1指向的是同一个内存对象,修改其中一个会影响所有指向该对象的变量。

内容的提问来源于stack exchange,提问作者Lomic Legone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:32:46