KaiBo 发表于 2022-7-6 15:22:28

图纸集VBA索引

我编写了一些代码,可以从图纸集管理器中提取图纸和子集,但输出的信息是无序的。是否有方法按sheetset manager托盘中显示的顺序提取此信息?或者有没有一种方法可以为每个表和子集获取某种索引号?
拉取页码没有帮助,因为我们的页码有字母和数字。
Dim ShtNum As String
Dim oSubset As AcSmSubset
Dim pSubset As AcSmSubset
Dim oSheet As AcSmSheet
Dim oItem As IAcSmPersist
Dim ShSetAR(1 To 3, 1 To 200) As String
Dim ShSetARCount As Integer

'' Synchronize Sheets with Sheet Properties
Private Sub CopyShsetarray()
'' Create a Reference to the Sheet Set Manager Object
   Dim oSheetSetMgr As AcSmSheetSetMgr
   Set oSheetSetMgr = New AcSmSheetSetMgr
'' Get the current Sheet Set
   Dim oSheetDb As AcSmDatabase
   Set oSheetDb = oSheetSetMgr.GetDatabaseEnumerator().Next
'' Get the objects in the Sheet Set
   Dim oEnum As IAcSmEnumPersist
   Set oEnum = oSheetDb.GetEnumerator
'' Get the first object in the Enumerator
MsgBox oSheetDb.GetFileName
   Set oItem = oEnum.Next
'' Step through all the objects in the Sheet Set
MsgBox oItem.GetTypeName
       Do While Not oItem Is Nothing

'' Add Item to Array
On Error Resume Next

         If oItem.GetTypeName = "AcSmSheet" Or oItem.GetTypeName = "AcSmSubset" Then
               ShSetARCount = 1 + ShSetARCount
               Set pSubset = oItem.GetOwner()
               ShSetAR(2, (ShSetARCount)) = pSubset.GetName
               ShSetAR(3, (ShSetARCount)) = oItem.GetTypeName
                   If oItem.GetTypeName = "AcSmSheet" Then
                     Set oSheet = oItem
                     ShSetAR(1, (ShSetARCount)) = ShtNumFromPath(oSheet.GetLayout.GetFileName)
                     Else
                     Set oSubset = oItem
                     ShSetAR(1, (ShSetARCount)) = oSubset.GetName
                   End If
               'MsgBox ShSetARCount & "___" & ShSetAR(1, (ShSetARCount)) & "___" & ShSetAR(2, (ShSetARCount)) & "___" & ShSetAR(3, (ShSetARCount))
         End If

'' Get the next Sheet
       Set oItem = oEnum.Next
       Loop
       Next
End Sub

ML0940 发表于 2022-7-6 15:39:24

你好,凯波,
我不完全确定你在问什么,然而,这句话

Dim ShSetAR(1 To 3, 1 To 200) As String 'number of used rows in (1,0)

可能是个问题。
 
这些值不应该声明为整数而不是字符串变量吗?
 
毫升

KaiBo 发表于 2022-7-6 15:43:40

Ml0940,
不,它不应该是整数,因为我不想把整数放在数组中。对于图纸集中的每个图纸或子集,我要输入项目的名称,它是父名称,无论它是图纸还是子集,理想情况下是它在图纸集中的位置。只有最后一项是整数,我还不知道如何提取这些信息。
我基本上是想在我们的数据库和图纸集之间建立一个链接,我需要知道东西在图纸集中出现的顺序,因为我们的一些员工不理解我们的软件包需要以复杂的方式排列。

ML0940 发表于 2022-7-6 16:00:38

我明白了,这是一个字符串数组。
 
是的,我理解图纸集和字段的值;一旦理解了它们,它们对于简化某些事情非常有用。
 
我有一个VBA项目,我“几乎”一年前做的;我已经离开CAD和VBA几个月了,但是,我很高兴与大家分享这个项目。
 
我不能保证它能满足你的需要,但你一定可以看看。
 
此外,图纸集管理器会自动创建每个图形的索引。再说一次,我有些生疏,但我可能记得,你必须遍历每个集合才能得到子集。
 
好吧,如果你愿意,我可以帮你拿到这个项目吗?
 
毫升

KaiBo 发表于 2022-7-6 16:10:24

是的,我很想看看你做了什么。
我知道你说的生锈是什么意思,我很少需要一年编写一次以上的程序。

ML0940 发表于 2022-7-6 16:20:01

图纸集很复杂,与其他VBA/ACAD代码相比,VBA代码很奇怪。
 
我记得我花了很多时间试图在图纸集代码上找到“任何”信息;之后可能会有更多。
 
好啊
我附上该项目;你需要解压它。
 
这个项目的主要功能是处理自定义字段,然而,我认为您需要的答案“可能”在CustomSheetSetProps模块的子程序:LoopThroughSheets中。
 
我相信我正在使用所有的函数,除了MiscFunction,它是后来额外的。
 
我希望这有帮助。
 
让我知道你过得怎么样。
 
毫升
CustSheetSetProps-1。拉链

ML0940 发表于 2022-7-6 16:31:53

凯波,
我的意思是说自定义属性和字段,然而,这同样适用;您仍然需要遍历每个图形集和子集以获得自定义特性;这就是为什么我确信你会在那里找到你需要的东西。
 
我记得上次我用它的时候它100%有效。
 
好吧,好吧,再一次,让我知道你过得怎么样。
 
毫升
页: [1]
查看完整版本: 图纸集VBA索引