ANDREWPCX 发表于 2022-7-6 11:37:11

AcadBlockReference VBA Inserti

我要编辑多个块参照的插入点。我一直在尝试使用以下代码编辑它们:
 
Private Sub FINDMARQBOOKINLAYOUTS()
Dim OBJLAYOUT As AcadLayout
Dim AOBJ As AcadEntity
Dim MARK As AcadBlockReference
Dim INSSTR As String
Dim ATTDATE As String
Dim LAYOUTNAME As String
Dim INSPOINT(0 To 2) As Variant

ThisDrawing.SetVariable "REGENMODE", 0
INSPOINT(0) = -0.125
INSPOINT(1) = -0.125
INSPOINT(2) = 0

For Each OBJLAYOUT In ThisDrawing.Layouts
   If OBJLAYOUT.Name = "Model" Then
   Else
   ThisDrawing.ActiveLayout = OBJLAYOUT
   LAYOUTNAME = OBJLAYOUT.Name
       'COUNT1 = COUNT1 + 1 ' THIS IS JUST FOR VERIFICATION
       'START BLOCK ITERATION
       For Each AOBJ In ThisDrawing.ActiveLayout.Block
         If TypeOf AOBJ Is AcadBlockReference Then
               If AOBJ.Name = "MARQ-BOOK" Then
                   Set MARK = AOBJ
                   MARK.InsertionPoint(0) = INSPOINT(0)
                   MARK.InsertionPoint(1) = INSPOINT(1)
                   MARK.InsertionPoint(2) = INSPOINT(2)
                   INSSTR = INSSTR & "(" & MARK.InsertionPoint(1) & "," & MARK.InsertionPoint(1) & "," & MARK.InsertionPoint(2) & ")"
               End If
         End If
       Next AOBJ
   End If
Next OBJLAYOUT
ThisDrawing.SetVariable "REGENMODE", 1
MsgBox INSSTR
Unload Me
End Sub
 
这个宏迭代布局,找到一个特定的块引用,然后我试图更改其插入点属性,但我一直没能做到。我知道我错过了什么,但找不到什么。我很感谢你在这方面的帮助。

ANDREWPCX 发表于 2022-7-6 12:30:45

请有人回答我的问题

SEANT 发表于 2022-7-6 12:40:09

为了测试的目的,我稍微修改了一下你的习惯。看看这是否更好。
 
Sub FINDMARQBOOKINLAYOUTS()
Dim OBJLAYOUT As AcadLayout
Dim AOBJ As AcadEntity
Dim MARK As AcadBlockReference
Dim INSSTR As String
Dim ATTDATE As String
Dim LAYOUTNAME As String
Dim INSPOINT(0 To 2) As Double 'Dim as double array

ThisDrawing.SetVariable "REGENMODE", 0
INSPOINT(0) = -0.125
INSPOINT(1) = -0.125
INSPOINT(2) = 0

For Each OBJLAYOUT In ThisDrawing.Layouts
   If OBJLAYOUT.Name <> "Model" Then
   ThisDrawing.ActiveLayout = OBJLAYOUT
   LAYOUTNAME = OBJLAYOUT.Name
       'COUNT1 = COUNT1 + 1 ' THIS IS JUST FOR VERIFICATION
       'START BLOCK ITERATION
       For Each AOBJ In ThisDrawing.ActiveLayout.Block
         If TypeOf AOBJ Is AcadBlockReference Then
               If AOBJ.Name = "MARQ-BOOK" Then
                   Set MARK = AOBJ
                   MARK.InsertionPoint = INSPOINT 'reset insertion point
                   INSSTR = INSSTR & "(" & MARK.InsertionPoint(1) & "," & MARK.InsertionPoint(1) & "," & MARK.InsertionPoint(2) & ")"
               End If
         End If
       Next AOBJ
   End If
Next OBJLAYOUT
ThisDrawing.SetVariable "REGENMODE", 1
MsgBox INSSTR

End Sub
页: [1]
查看完整版本: AcadBlockReference VBA Inserti