T.Willey 发表于 2006-1-5 18:51:54

根据多个名称测试块名称

我知道如何做到这一点是lisp,但我的lisp文件有问题,所以我发现这可能是自学VBA的好时机。我正在为一个块占用纸张空间(Layout1),它可能是六个名称之一。
我该怎么做?
我是否会将变量设置为变体,然后测试对象?
感谢您提前提供任何帮助。只是在寻找推力。
**** Hidden Message *****

T.Willey 发表于 2006-1-5 19:09:01

所以你是说我必须测试每一种可能性?如果是这样,我可以这样做,因为无论它匹配哪个块名,我都必须做同样的事情。你正在做的事情看起来像是...lisp中的函数。我能把它写成一个if或语句吗?
If或Obj。名称是“标题-A”或Obj。名称为“标题-B”等.....?
谢谢你的帮助。

T.Willey 发表于 2006-1-5 19:14:00


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

干杯,格伦。

T.Willey 发表于 2006-1-5 19:25:11

在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

Jeff_M 发表于 2006-1-5 19:37:36

因此,使用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

Jeff_M 发表于 2006-1-5 19:42:25

感谢 Glen 的初始代码,并感谢 Jeff 的解释。 我认为这将是一段漫长而崎岖不平的道路。 不过,这应该让我开始。 如果可以的话,还有一个问题。
你为什么在这里的末尾加上“作为变体”? 我也会在帮助中寻找,只是觉得你可以告诉我比我在帮助中找到它更容易。

T.Willey 发表于 2006-1-5 19:44:50

函数始终向调用方返回值。
在本例中,返回值
是一个变量。
因此,在这种情况下,局部变量SearchForBlock = AttVar 期望分配一个 Variant TYPE 值以进行返回。

Kerry 发表于 2006-1-5 19:55:35

好的。我明白了。谢谢克里,这很有意义。
去尝试学习更多的东西。
页: [1]
查看完整版本: 根据多个名称测试块名称