Excel VBA传递ListObject到UserForm报Invalid use of property错误如何解决
问题修复方案
报错的核心原因是 ListObject 属于对象类型,VBA中值类型(如String、Integer等)和对象类型的属性定义、赋值规则完全不同:
Property Let仅用于值类型属性的赋值定义- 对象类型属性的赋值必须使用
Property Set定义,且赋值时必须加Set关键字
修复步骤
- 第一步:修改UserForm中的DataTable属性定义
删除原有Property Let DataTable代码块,替换为Property Set定义,同时内部赋值增加Set关键字:
Private msOperationType As String Private msDataTable As ListObject ' 原有变量定义无需修改 Property Let OperationType(sText As String) ' 原有值类型属性无需修改 msOperationType = sText NewOperationTitle.Caption = "New operation: " & sText InformationLabel.Caption = "Fill out all the information regarding the " & sText & " operation" End Property ' 替换原有Property Let块为以下代码 Property Set DataTable(sDataTable As ListObject) Set msDataTable = sDataTable End Property Private Sub UserForm_Initialize() 'Code here will do things End Sub
- 第二步:修改模块中的属性赋值代码,给DataTable赋值时增加
Set关键字:
Dim AddOperationForm As UserForm1 Set AddOperationForm = New UserForm1 AddOperationForm.OperationType = "Add" Set AddOperationForm.DataTable = Worksheets(14).ListObjects("Operations") ' 此处新增Set关键字 AddOperationForm.Show
修改完成后即可正常将ListObject对象传入UserForm,后续直接使用私有变量msDataTable即可操作对应表格。
内容的提问来源于stack exchange,提问作者Maxime Michel
相关产品推荐
相关产品推荐

