2017-11-27 61 views
3

特定のレイヤーのAutoCadドキュメントに既にあるブロックのxとyの位置を見つけようとしています。現在のところ、コードはX位置を返しているだけで、ent.InsertionPoint(0)とent.InsertionPoint(1)は何も返しません。どんな助けも素晴らしいだろう!AutoCad VBAは既存のブロックのX&Y位置を見つける

Dim blk As AcadBlockReference 
Dim atts As Variant 
Dim att As AcadAttributeReference 
Dim sset As AcadSelectionSet 
Dim ent As AcadEntity 
Dim obj As AcadObject 

'Select all that are on the dup layer 
On Error Resume Next 
ACAD.ActiveDocument.SelectionSets.Item("Park-Dup").Delete 
Set sset = ACAD.ActiveDocument.SelectionSets.Add("Park-Dup") 
sset.Select acSelectionSetAll 


Dim tryBlockRef As AcadBlockReference 

For Each ent In sset 
    If TypeOf ent Is AcadBlockReference Then 
     Sheet1.Cells(i, 4) = ent.InsertionPoint 
    End If 
Next 

答えて

2

私はこれを使用して動作させることができました。 x/y/z配列にアクセスできるように、挿入ポイントをバリアント変数に設定する必要があります。挿入点配列内にあるので、X位置によって何を意味するか分かりません。

Public Sub test() 
    Dim sset As AcadSelectionSet 
    Dim ent As AcadEntity 
    Dim Book1 As Object 
    Dim Sheet1 As Object 
    Dim xlApp As Object 
    Set xlApp = CreateObject("Excel.Application") 
    xlApp.Visible = True 
    Set Book1 = xlApp.Workbooks.Add() 
    Set Sheet1 = Book1.worksheets(1) 
    Dim i As Integer 

    'Select all that are on the dup layer 
    On Error Resume Next 
    ThisDrawing.SelectionSets.Item("Park-Dup").Delete 
    On Error GoTo 0 
    Set sset = ThisDrawing.SelectionSets.Add("Park-Dup") 
    sset.Select acSelectionSetAll 

    Dim inPt As Variant 

    i = 1 
    For Each ent In sset 
     If TypeOf ent Is AcadBlockReference Then 
     If InStr(ent.EffectiveName, "$") = 0 Then 
      inPt = ent.InsertionPoint 
      Sheet1.Cells(i, 1) = inPt(0) 
      Sheet1.Cells(i, 2) = inPt(1) 
      i = i + 1 
     End If 
     End If 
    Next 
End Sub 

注:Excelではなく、AutoCADでVBAを使用しています。

+0

これは完全にあなたに感謝しました! – Chris

関連する問題