VBA传递类模块实例作为子过程参数时触发错误如何解决?
问题原因
VBA对值类型和对象类型的赋值有不同语法要求:
- Integer、String、Boolean这类值类型变量,直接用
=赋值即可 - 所有类模块实例、内置对象(如Worksheet、Range)这类对象类型变量,必须使用
Set关键字完成赋值,否则就会触发运行时错误。这也是为什么你传递普通类型参数不会报错,只有传递类实例时才会出问题,和你是否添加ByVal/ByRef参数修饰符无关。
修复方案
修改gameUi类模块的Init方法,给对象赋值的语句添加Set关键字即可:
Private board As board Sub Init(gameBoard As board) Set board = gameBoard End Sub
补充说明
- 后续如果需要清空对象变量释放内存,也需要遵循对象赋值规则,写法为
Set board = Nothing - 如果是给对象的属性(值类型)赋值,不需要加Set,只有给对象变量本身赋值时需要使用Set关键字
内容的提问来源于stack exchange,提问作者codehero
相关产品推荐
相关产品推荐

