数组的对象属性列表?
我想得到一个数组中一个对象的所有属性的列表 ;用VBA有什么方法可以做到这一点吗具体来说,我想获得一个图层的所有属性和值,以便存储它们或将它们复制到另一个图形中 ;我不知道';我不想指定属性,因为我希望代码在将新属性添加到对象模型时接受它们
欢迎所有建议,
Mike Weaver
我不知道';我不这么认为';这是可能的 ;我真的很想在这件事上被证明是错的,只是因为看到它会很酷。 MSDN有一篇文章http://msdn.microsoft.com/msdnmag/issues/1200/TypeLib/default.aspx这解释了如何使用tlbinf32.dll来实现,但我希望vba中内置了一些东西
迈克 可以用Lisp完成 ;看看';原子族#039;作用 Tim,
我能看到的唯一可能获得原子族对象属性列表的方法是使用vlax-property-available-p检查原子族的每个成员与我的对象,看看它是否是该对象的属性 ;这是你想的吗,还是我还有别的办法;我失踪了
迈克·韦弗 这就是我当时的想法,也是我的议员(从这里)向我展示的方式 ;我不知道';我不知道还有别的办法,迈克。 使用AxDbDocument和ThisDrawing克隆它。从内存复制对象。
使用上述链接中的信息,此代码(尽可能丑陋和笨拙)将返回一个集合,其中填充了所需Autocad实体的属性[代码大多数代码来自类型库信息库的帮助文件
VBA项目必须包含对TypeLineInformation(tlbinf32.dll)的引用
结果在所附图像中
这就是我当时的想法,也是我的议员(从这里)看到的 ;我不知道';我不知道还有别的办法,迈克
将层设置为层对象后,我得到以下结果:
(setq temp (vl-remove-if-not (function (lambda(var)
(vlax-property-available-p layer var))) (atoms-family 0)))
(LAYERON) 不完全是我所期望的 好吧,忘掉我上一篇文章中的所有内容
它变得简单多了
仍然需要引用TypeLineInformation(tlbinf32.dll)
Public Sub testGetProps()
Dim cData As Collection
Set cData = dkb_GetProperties(ThisDrawing.ModelSpace(0)) 'select your object however suits you best
End Sub
Public Function dkb_GetProperties(pObject As Acad0bject) As Collection
Dim iInterFaceInfo As InterfaceInfo
Dim cClassInfo As TypeInfo
Dim colProperties As Collection
Dim i As Integer
Set colProperties = New Collection
Set iInterFaceInfo = InterfaceInfoFromObject(pObject)
For i = 1 To iInterFaceInfo.Members.Count
If iInterFaceInfo.Members(i).InvokeKind = INVOKE_PROPERTYGET Then
colProperties.Add iInterFaceInfo.Members(i).Name
End If
Next i
Set dkb_GetProperties = colProperties
End Function
页:
[1]
2