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

VBA类属性赋值后读取为空及语法错误问题咨询

问题分析与解决方案

1. 属性赋值后读取为空的原因

Class2的Class_Initialize过程中,paramX1和paramX2是局部变量,仅在初始化过程内部有效,和Property Get/Let里引用的变量并非同一对象。

VBA中,若模块级未声明对应变量,Property里的paramX1会被默认当作未声明的变体变量,初始值为0。即便在初始化过程中给局部的paramX1赋值,也不会影响Property访问的变量,这就是赋值后读取结果为0的原因。

解决方法:在Class2模块顶部声明模块级的paramX1和paramX2,而非在初始化过程内部声明。

2. 注释语句的语法错误原因

main过程里的注释语句Debug.Print oClass1.oClass2.sum2(oClass2.p_paramX1, oClass2.p_paramX2)中,oClass2未在main过程中定义,它是Class1的公共成员,正确引用需通过oClass1.oClass2前缀,直接写oClass2会触发变量未定义的语法错误。


修正后的Class2代码

Option Explicit
' 声明模块级变量,供Property Get/Let访问
Private paramX1 As Integer
Private paramX2 As Integer

Private Sub Class_Initialize()
    paramX1 = 1
    paramX2 = 2
End Sub

Public Function sum2(X1, X2)
     sum2 = X1 + X2
End Function

Public Property Get p_paramX1() As Integer
    p_paramX1 = paramX1
End Property

Public Property Let p_paramX1(value As Integer)
    paramX1 = value
End Property

Public Property Get p_paramX2() As Integer
    p_paramX2 = paramX2
End Property

Public Property Let p_paramX2(value As Integer)
    paramX2 = value
End Property

修正后的main过程注释语句

' 正确引用方式
Debug.Print oClass1.oClass2.sum2(oClass1.oClass2.p_paramX1, oClass1.oClass2.p_paramX2)

内容的提问来源于stack exchange,提问作者Yury Komarinskiy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 09:15:14