-KarL- 发表于 2022-7-6 15:36:44

 
我已经试过了,但它只选择了一个动态块(我唯一不需要的一个),而没有选择图形中的其他两个动态块。

Olhado_ 发表于 2022-7-6 15:42:33

 
这个线程非常有用;但我有一个后续问题。
 
如果要在过滤器中包含各种块名,是否必须在过滤器类型中包含相应的“2”?
 
换句话说,过滤器类型和过滤器数据数组的大小是否必须相同,或者其中一个(通常是过滤器数据)是否可以更大?
 
谢谢

ML0940 发表于 2022-7-6 15:43:17

奥尔哈多,
一个数组确实可以比另一个数组大。
 
 
你“准确地”用选定的块做什么?

Olhado_ 发表于 2022-7-6 15:49:53

 
谢谢你的回复
 
这是个好消息,因为现在我可能不需要通过LISP和VBA之间的“用户”系统变量进行通信。
 
这就是我现在正在做的:
 


Dim LowerLeft As Variant
Dim UpperRight As Variant

' Get the Title Block Name defined from LISP routine
blkName = Application.ActiveDocument.GetVariable("USERS1")

On Error Resume Next
   ThisDrawing.SelectionSets("GetTitleBlock").Delete
   If Err.Number > 0 Then Err.Clear

   Set ssetobj = ThisDrawing.SelectionSets.Add("GetTitleBlock")
   gpCode(0) = 0
   dataValue(0) = "INSERT"
   gpCode(1) = 2
   dataValue(1) = blkName
   ssetobj.Select Mode:=acSelectionSetAll, FilterType:=gpCode, FilterData:=dataValue

   For Each acEnt In ssetobj
       acEnt.GetBoundingBox LowerLeft, UpperRight
   Next acEnt

   ReDim Preserve LowerLeft(0 To 1)
   ReDim Preserve UpperRight(0 To 1)


 
所以,根据你刚才说的,我可以将“数据值”表示为:
 


dataValue(1) = "TitleBlock1":dataValue(2) = "TitleBlock2":dataValue(3) = "TitleBlock2": etc


我需要这样做,因为我试图在标题栏的右下角插入一个块,然后打印它,然后删除插入的块。这意味着这些图纸是最终的。

ML0940 发表于 2022-7-6 15:52:26

不客气。
 
我想我理解你想做什么,然而,我觉得你把事情复杂化了一点。
 
在这种情况下,不需要使用Users变量,也不需要VBA与LISP通信。
 
您是否已经编写了一个试图与VBA模块结合的现有LISP例程?
 
毫升

ML0940 发表于 2022-7-6 15:56:20

很抱歉
我错过了这条评论。。
5
 
好的,让我们从头开始;使用VBA,您可以插入块,让选择集抓取最后插入的对象,在本例中是标题栏左下角的插入块;然后,我们可以进入打印部分,在我们为您完成该部分后。
 
然后,在打印后,可以从选择集中删除块;最后,我们将删除选择集。
 
如果你想进一步帮助,我需要你的标题栏的名称,它是否已经存在于图纸中?标题栏是否位于0,0,它是否会保留在那里?另外,您试图插入标题栏左下角的块的名称是什么?
 
如果我们可以做那么多工作,我们可以继续打印,这就是你将提示用户选择点的地方。
 
毫升

ML0940 发表于 2022-7-6 15:59:55

好吧,我假设你不再需要帮助了。
祝你好运
 
毫升

Olhado_ 发表于 2022-7-6 16:03:20

对不起,没有回复你;但是,是的,我想我相信我有一个版本的代码,在LISP和VBA。
作为记录,我不能只使用“最后插入的对象”,因为标题栏通常是要插入的第一个对象之一。
此外,我最终只使用VBA设置打印选项,这主要是因为我对LISP有了更好的理解,并且能够更容易地找到块和边界。
谢谢你的提议。很抱歉,我不能接受你。
页: 1 [2]
查看完整版本: VBA-选择集