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
相关产品推荐
相关产品推荐

