根据多个名称测试块名称
我知道如何做到这一点是lisp,但我的lisp文件有问题,所以我发现这可能是自学VBA的好时机。我正在为一个块占用纸张空间(Layout1),它可能是六个名称之一。我该怎么做?
我是否会将变量设置为变体,然后测试对象?
感谢您提前提供任何帮助。只是在寻找推力。
**** Hidden Message ***** 所以你是说我必须测试每一种可能性?如果是这样,我可以这样做,因为无论它匹配哪个块名,我都必须做同样的事情。你正在做的事情看起来像是...lisp中的函数。我能把它写成一个if或语句吗?
If或Obj。名称是“标题-A”或Obj。名称为“标题-B”等.....?
谢谢你的帮助。
Public Sub SearchForBlock()
Dim pEnt As AcadEntity
Dim pBlkRef As AcadBlockReference
For Each pEnt In ThisDrawing.PaperSpace
If TypeOf pEnt Is AcadBlockReference Then
Set pBlkRef = pEnt
Select Case UCase(pBlkRef.Name)
Case "NAME1", "NAME2", "NAME3", "NAME4", "NAME5", "NAME6"
' Do something here...
End Select
End If
Next
End Sub
干杯,格伦。
在VBA中,您只需要在使用Object时使用Set。任何其他类型,您只需使用
var="Layout1"
或
var=2.0
即可返回函数的结果:
Private Function GetTitleBlock() As Variant
Dim LayoutCol As AcadLayouts
.....whatever
....more whatever
GetTitleBlock = AttVar
End Function
然后在另一个Sub/Function中,您可以这样调用它:
OtherSubAttvar = GetTitleBlock
您也可以这样传递要搜索的布局:
OtherSubAttvar = GetTitleBlock("Layout1")
''and change the Function to this, remove the Dim Layout Name from the function
Private Function GetTitleBlock(LayoutName as String) As Variant
因此,使用Glenn的例子:
Public Function SearchForBlock(LayoutName As String) As Variant
Dim pEnt As AcadEntity
Dim pBlkRef As AcadBlockReference
Dim Space As AcadBlock
Dim AttVar As Variant
Set Space = ThisDrawing.Layouts.Item(LayoutName).Block
For Each pEnt In Space
If TypeOf pEnt Is AcadBlockReference Then
Set pBlkRef = pEnt
Select Case UCase(pBlkRef.Name)
Case "TDG", "NAME2", "NAME3", "NAME4", "NAME5", "NAME6"
AttVar = pBlkRef.GetAttributes
End Select
End If
Next
SearchForBlock = AttVar
End Function
感谢 Glen 的初始代码,并感谢 Jeff 的解释。 我认为这将是一段漫长而崎岖不平的道路。 不过,这应该让我开始。 如果可以的话,还有一个问题。
你为什么在这里的末尾加上“作为变体”? 我也会在帮助中寻找,只是觉得你可以告诉我比我在帮助中找到它更容易。 函数始终向调用方返回值。
在本例中,返回值
是一个变量。
因此,在这种情况下,局部变量SearchForBlock = AttVar 期望分配一个 Variant TYPE 值以进行返回。
好的。我明白了。谢谢克里,这很有意义。
去尝试学习更多的东西。
页:
[1]