
EXCEL VBA 提示编译错误,用户定义类型没定义
Sub获取窗体中控件的属性列表()OnErrorResumeNext'遇到错误时继续执行Dim控件AsObject,数量AsLong,arr()AsStringForEa...
Sub 获取窗体中控件的属性列表()
On Error Resume Next '遇到错误时继续执行
Dim 控件 As Object, 数量 As Long, arr() As String
For Each 控件 In userforml.Controls '遍历窗体中所有的控件
Dim 信息 As InterfaceInfo, mem As MemberInfo '声明变量,用于获取控件属性
Set 信息 = InterfaceInfoFromObject(控件) '从控件获取属性
If Not (信息 Is noting) Then '如果有可以提取的信息
For Each mam In 信息.Members '遍历信息的子项目
'invokekind表示对象属性,其成员有INVOKE-func、invoke-propertyget、
'invoke-propertyput、invoke-propertyputref
If mem.InvokeKind And INVOKE_PROPERTYPUT Then
数量 = 数量 + 1 '累加变量,它表示找到的作息个数
'重新声明数组的维数,当找到的信息增加时,数组的维数也相应增加
ReDim Preserve arr(1 To 3, 1 To 数量)
arr(1, 数量) = 控件.Name '对数组的第一行,最后一列赋值为控件名称
arr(2, 数量) = mem.Name '对数组的第二行,最后一列赋值为属性名称
'对数组的第三行,最后一列赋值为属性值
arr(3, 数量) = CallByName(控件, mem.Name, VbGet)
End If
Next
End If
Next
If 数量 > 0 Then '如果找到有目标值
[a1:c1] = Array("控件", "属性", "值") '写入标题
[a2].Resize(数量, 3) = WorksheetFunction.Transpose(arr)
'将数组的值导入工作表
Columns("a:c").AutoFit 'a:c列自动适应列宽
Columns("a:c").HorizontalAlignment = xlLeft '左对齐
End If
End Sub 展开
On Error Resume Next '遇到错误时继续执行
Dim 控件 As Object, 数量 As Long, arr() As String
For Each 控件 In userforml.Controls '遍历窗体中所有的控件
Dim 信息 As InterfaceInfo, mem As MemberInfo '声明变量,用于获取控件属性
Set 信息 = InterfaceInfoFromObject(控件) '从控件获取属性
If Not (信息 Is noting) Then '如果有可以提取的信息
For Each mam In 信息.Members '遍历信息的子项目
'invokekind表示对象属性,其成员有INVOKE-func、invoke-propertyget、
'invoke-propertyput、invoke-propertyputref
If mem.InvokeKind And INVOKE_PROPERTYPUT Then
数量 = 数量 + 1 '累加变量,它表示找到的作息个数
'重新声明数组的维数,当找到的信息增加时,数组的维数也相应增加
ReDim Preserve arr(1 To 3, 1 To 数量)
arr(1, 数量) = 控件.Name '对数组的第一行,最后一列赋值为控件名称
arr(2, 数量) = mem.Name '对数组的第二行,最后一列赋值为属性名称
'对数组的第三行,最后一列赋值为属性值
arr(3, 数量) = CallByName(控件, mem.Name, VbGet)
End If
Next
End If
Next
If 数量 > 0 Then '如果找到有目标值
[a1:c1] = Array("控件", "属性", "值") '写入标题
[a2].Resize(数量, 3) = WorksheetFunction.Transpose(arr)
'将数组的值导入工作表
Columns("a:c").AutoFit 'a:c列自动适应列宽
Columns("a:c").HorizontalAlignment = xlLeft '左对齐
End If
End Sub 展开
展开全部
InterfaceInfo 是外部对象的属性 需要先加载或者申明
这个应该是老罗书中的代码吧,回头再去看看吧!
这个应该是老罗书中的代码吧,回头再去看看吧!
追问
是他书中的疑难1,如何获取所有控件的属性及属性值
我照他的代码输的,也已经引用了了“Typelib Information"并添加了。不知道为什么还会这样?
追答
Typelib Information 应该是没应用正确!
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个得事先在 工程 引用里面把 你需要引用的控件先 勾选引用了,这个叫前期绑定,这样才可以申明成控件支持的类型,如果是后期绑定,或者不明白类型,这种控件对象 建议 声明成Object 或者Variant
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
能说一下哪一句有问题吗?
追问
Dim 信息 As InterfaceInfo, mem As MemberInfo '声明变量,用于获取控件属性
追答
一般来As然后空格时会出来可以选择的类型
InterfaceInfo有这样的吗?
不是您想AS什么就AS什么的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请问,楼主解决了么,我最近在学这本书,也是碰到了同样的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询