我已经试过了,但它只选择了一个动态块(我唯一不需要的一个),而没有选择图形中的其他两个动态块。
这个线程非常有用;但我有一个后续问题。
如果要在过滤器中包含各种块名,是否必须在过滤器类型中包含相应的“2”?
换句话说,过滤器类型和过滤器数据数组的大小是否必须相同,或者其中一个(通常是过滤器数据)是否可以更大?
谢谢 奥尔哈多,
一个数组确实可以比另一个数组大。
你“准确地”用选定的块做什么?
谢谢你的回复
这是个好消息,因为现在我可能不需要通过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
我需要这样做,因为我试图在标题栏的右下角插入一个块,然后打印它,然后删除插入的块。这意味着这些图纸是最终的。 不客气。
我想我理解你想做什么,然而,我觉得你把事情复杂化了一点。
在这种情况下,不需要使用Users变量,也不需要VBA与LISP通信。
您是否已经编写了一个试图与VBA模块结合的现有LISP例程?
毫升 很抱歉
我错过了这条评论。。
5
好的,让我们从头开始;使用VBA,您可以插入块,让选择集抓取最后插入的对象,在本例中是标题栏左下角的插入块;然后,我们可以进入打印部分,在我们为您完成该部分后。
然后,在打印后,可以从选择集中删除块;最后,我们将删除选择集。
如果你想进一步帮助,我需要你的标题栏的名称,它是否已经存在于图纸中?标题栏是否位于0,0,它是否会保留在那里?另外,您试图插入标题栏左下角的块的名称是什么?
如果我们可以做那么多工作,我们可以继续打印,这就是你将提示用户选择点的地方。
毫升 好吧,我假设你不再需要帮助了。
祝你好运
毫升 对不起,没有回复你;但是,是的,我想我相信我有一个版本的代码,在LISP和VBA。
作为记录,我不能只使用“最后插入的对象”,因为标题栏通常是要插入的第一个对象之一。
此外,我最终只使用VBA设置打印选项,这主要是因为我对LISP有了更好的理解,并且能够更容易地找到块和边界。
谢谢你的提议。很抱歉,我不能接受你。
页:
1
[2]