VBA调用ParseSegment属性提示“Invalid Use of property”错误求助
解决VBA中“Invalid Use of property”错误的问题
我来帮你排查这个问题!你遇到的“Invalid Use of property”错误其实是个很典型的VBA属性使用误区,咱们一步步拆解:
你的测试模块代码
Private Sub fooTest() Dim foo As cSegment Set foo = New cSegment foo.ParseSegment Debug.Print foo.Segment End Sub
你的类模块代码
Option Explicit Private pElements As Collection Private pSegmentData As String Public Property Let ParseSegment(value As String) pSegmentData = value ParseElements pSegmentData End Property
问题根源
你这里的核心问题是把Property Let当成普通方法来调用了!
在VBA里,Property Let是专门用来给属性赋值的语法,必须搭配=号传递对应类型的参数,而不是像Sub过程那样直接对象.属性名调用。你现在的测试代码里直接写foo.ParseSegment,既没有赋值操作,也没传要求的String参数,VBA自然会抛出“Invalid Use of property”错误。
两种修正方案
根据你的实际需求,有两种可行的修正思路:
方案1:把ParseSegment改成方法(Sub)
如果你的意图是主动触发解析操作(比如先设置数据再调用解析),那把它改成Sub方法更合理:
修改类模块代码:
Option Explicit Private pElements As Collection Private pSegmentData As String ' 改成Sub方法,需要参数的话可以自行添加 Public Sub ParseSegment() ' 执行解析逻辑 ParseElements pSegmentData End Sub ' 单独添加设置数据的属性 Public Property Let SegmentData(value As String) pSegmentData = value End Property
对应的测试模块调用:
Private Sub fooTest() Dim foo As cSegment Set foo = New cSegment ' 先设置需要解析的数据 foo.SegmentData = "你的测试字符串内容" ' 调用解析方法 foo.ParseSegment Debug.Print foo.Segment End Sub
方案2:正确使用Property Let赋值
如果你确实想保留Property Let ParseSegment的设计,那必须按照赋值的语法来调用,传递要求的String参数:
修改测试模块代码:
Private Sub fooTest() Dim foo As cSegment Set foo = New cSegment ' 给Property Let赋值,传入需要解析的字符串 foo.ParseSegment = "你的测试字符串内容" Debug.Print foo.Segment End Sub
另外提醒下:你类里的ParseElements过程要确保已经正确实现,不然可能会引发新的问题哦。
内容的提问来源于stack exchange,提问作者Maldred
相关产品推荐
相关产品推荐

