VBA将父类传递给子类
我在上找到了一篇很好的帖子,这似乎正是我想要的:但是我对它的修改给了我VBA将父类传递给子类,vba,class,subclass,Vba,Class,Subclass,我在上找到了一篇很好的帖子,这似乎正是我想要的:但是我对它的修改给了我对象不支持此属性或方法。 感谢Mat的马克杯和Tomalak,我的代码现在可以正常工作了: 父类-CLS计算机 子类-clsCD 代码模块-模块1 如果我测试我,它是一个对象(例如,如果IsObject(Me)然后停止计算为true),当我键入Me时,Intellisense显示CLSCOComputer中的所有属性和方法。本地人窗口将我显示为CLSCOComputer对象。我知道要检查的所有东西都表明我是一个CLS计算机对象
对象不支持此属性或方法。
感谢Mat的马克杯和Tomalak,我的代码现在可以正常工作了:
父类-CLS计算机
子类-clsCD
代码模块-模块1
如果我测试我,它是一个对象(例如,
如果IsObject(Me)然后停止
计算为true),当我键入Me时,Intellisense显示CLSCOComputer中的所有属性和方法。
本地人窗口将我显示为CLSCOComputer对象。我知道要检查的所有东西都表明我是一个CLS计算机对象,那么我做错了什么?我不在电脑旁,所以只是瞎编代码
Public Property Set Parent(ByRef Obj As clsComputer)
Set pParent = Obj
End Property
为您的CLS计算机课程试一试
Option Explicit
Private pCD As clsCD
''''''''''''''''''''''''''''''
' CD property
''''''''''''''''''''''''''''''
Public Property Get CD() As clsCD
Set CD = pCD
End Property
Public Property Set CD(value As clsCD)
pCD = value
End Property
Sub Class_Initialize()
Set pCD = New clsCD
pCD.Initialize(Me)
End Property
我不在我的电脑旁,所以只需要盲编码 为您的CLS计算机课程试一试
Option Explicit
Private pCD As clsCD
''''''''''''''''''''''''''''''
' CD property
''''''''''''''''''''''''''''''
Public Property Get CD() As clsCD
Set CD = pCD
End Property
Public Property Set CD(value As clsCD)
pCD = value
End Property
Sub Class_Initialize()
Set pCD = New clsCD
pCD.Initialize(Me)
End Property
经典
去掉括号
pCD.Initialize Me
完成了
参数周围的括号强制对其进行求值并通过val传递(不管过程的签名是什么),而且由于您可能尚未为clsComputer
定义默认属性,因此求值会中断,运行时甚至无法访问Initialize
方法
也就是说,按值传递对象引用没有错。事实上,这就是C和VB.NET默认所做的——考虑传递任何参数<代码> ByVal < /代码>。< /P> < P>经典> < /P>
去掉括号
pCD.Initialize Me
完成了
参数周围的括号强制对其进行求值并通过val传递(不管过程的签名是什么),而且由于您可能尚未为clsComputer
定义默认属性,因此求值会中断,运行时甚至无法访问Initialize
方法
也就是说,按值传递对象引用没有错。事实上,这就是C和VB.NET默认所做的——考虑传递任何参数<代码> ByVal < /代码>。< /P>没有骰子。它仍然会出错。ByRef是对象的默认值,因此从Let更改为Set并不能纠正此问题。但您甚至不能
Let
对象引用,AFAIK。如果我错了,请纠正我。没有错,绝对正确。除非我通过值传递对象引用,而不是通过引用@Tim属性Let
用于值类型。对对象使用属性集
。是的,您是正确的@Tomalak。你不能让对象。不幸的是,这仍然失败。如果我注了pCD.Initialize(Me)
并只设置pCD.Parent=Me
,代码运行良好。@Tim看到我的答案了吗。它仍然会出错。ByRef是对象的默认值,因此从Let更改为Set并不能纠正此问题。但您甚至不能Let
对象引用,AFAIK。如果我错了,请纠正我。没有错,绝对正确。除非我通过值传递对象引用,而不是通过引用@Tim属性Let
用于值类型。对对象使用属性集
。是的,您是正确的@Tomalak。你不能让对象。不幸的是,这仍然失败。如果我注意到pCD.Initialize(Me)
并只设置pCD.Parent=Me
,代码工作正常。@Tim看到我的答案了吗!在这个和@tomalak之间,这就解决了它!我会更新我的帖子。太棒了。最后我知道了帕伦斯想要做的最后一点。谢谢,啊哈!在这个和@tomalak之间,这就解决了它!我会更新我的帖子。太棒了。最后我知道了帕伦斯想要做的最后一点。谢谢
pCD.Initialize (Me) 'Error occurs on this line when using F8
pCD.Initialize Me