Select Case True 是一个常见的VBA编程技巧,用于在多个条件之间进行选择。具体来说,Select Case True 语句的每个 Case 语句都包含一个布尔表达式,这些表达式会逐个与 True 进行比较。当其中一个表达式的结果为 True 时,对应的代码块将被执行。Select Case True 示例,每个 Case 语句中的表达式 ent.ObjectName Like "*Line" 和 ent.ObjectName Like "*Circle" 都会返回布尔值 (True 或 False)。Select Case True 将这些布尔值与 True 进行比较,并执行匹配的代码块。
我们选择图形空间中第一个图元:
Dim ent As AcadEntity
Set ent = ThisDrawing.ModelSpace.Item(0)
' 不区分大小写的匹配
Select Case LCase(ent.ObjectName)
Case "acdbline"
MsgBox "This is a Line"
Case "acdbcircle"
MsgBox "This is a Circle"
Case Else
MsgBox "This is some other type of object"
End Select
Select Case True
Case ent.ObjectName Like "*line"
MsgBox "This is a Line"
Case ent.ObjectName Like "*circle"
MsgBox "This is a Circle"
Case Else
MsgBox "This is some other type of object"
End Select
'(InStr 函数)
If InStr(1, ent.ObjectName, "Line", vbTextCompare) > 0 Then
MsgBox "This is a Line"
ElseIf InStr(1, ent.ObjectName, "Circle", vbTextCompare) > 0 Then
MsgBox "This is a Circle"
Else
MsgBox "This is some other type of object"
End If
如果你不指定 compare 参数,InStr 默认区分大小写。使用 vbTextCompare 参数可以使 InStr 不区分大小写。以下是代码以及解释:Dim ent As AcadEntity
Set ent = ThisDrawing.ModelSpace.Item(0)
Select Case True
Case ent.ObjectName Like "*Line"
MsgBox "This is a Line"
Case ent.ObjectName Like "*Circle"
MsgBox "This is a Circle"
Case Else
MsgBox "This is some other type of object"
End SelectSelect
Case True:启动一个 Select Case 结构,将每个 Case 表达式的结果与 True 进行比较。Case ent.ObjectName Like "*Line":如果 ent.ObjectName 包含 "Line",则此表达式为 True,将执行 MsgBox "This is a Line"。Case ent.ObjectName Like "*Circle":如果 ent.ObjectName 包含 "Circle",则此表达式为 True,将执行 MsgBox "This is a Circle"。Case Else:如果前面的条件都不满足,将执行 MsgBox "This is some other type of object"。
注意事项
通配符匹配:Like 运算符允许使用通配符进行匹配。星号 (*) 匹配零个或多个字符,问号 (?) 匹配单个字符。在你的代码中,*Line 和 *Circle 都是合法的用法。大小写敏感:Like 运算符在VBA中默认是不区分大小写的。所以即使 ObjectName 的值是 "acdbLINE" 或 "ACDbcircle",你的匹配依然会成功。