Hallo zusammen,
kann mir jemand sagen wie ich alle layouts nach einem bestimmten block durchsuchen kann und die Attribute dann in eine excel-Datei schreiben.
Hier mein Ansatz:
Sub Ch12_Extract()
Dim Excel As Excel.Application
Dim ExcelSheet As Object
Dim ExcelWorkbook As Object
Dim RowNum As Integer
Dim Header As Boolean
Dim elem As AcadEntity
Dim Array1 As Variant
Dim Count As Integer
Dim Pfad As Variant
Pfad = "R:/AutocadEinstellungen/Zeichnungskopf/ZeichnungsVerwaltung/" & ThisDrawing.ActiveLayout.name & ".xls"
Dim Layouts As AcadLayouts, Layout As AcadLayout
Dim msg As String
Dim activeDoc As AcadDocument
' Returns current document in AutoCAD
Set activeDoc = ThisDrawing.Application.ActiveDocument
' Get layouts collection from document object
Set Layouts = ThisDrawing.Layouts
For Each Layout In Layouts
msg = msg & Layout.name & vbCrLf
Next
' Display a list of available layouts
MsgBox "Es befinden sich " & Layouts.Count & " Layouts in " & _
ThisDrawing.WindowTitle & ":" & msg
' Excel starten.
Set Excel = New Excel.Application
Excel.Visible = True
' Erstellen einer neuen Arbeitsmappe und Suchen des aktiven Arbeitsblatts.
Set ExcelWorkbook = Excel.Workbooks.Add
Set ExcelSheet = Excel.ActiveSheet
On Error GoTo Ende:
ExcelWorkbook.SaveAs Pfad
RowNum = 1
Header = False
' Papierbereich durchlaufen, um
' alle Blockreferenzen zu finden.
For Each elem In ThisDrawing.PaperSpace
With elem
' Gefundene Blockreferenz auf
' Attribute prüfen
If StrComp(.EntityName, "AcDbBlockReference", 1) _
= 0 Then
If .HasAttributes Then
' Attribute abrufen
Array1 = .GetAttributes
' Tagstrings für die Attribute
' in Excel kopieren
For Count = LBound(Array1) To UBound(Array1)
If Header = False Then
If StrComp(Array1(Count).EntityName, _
"AcDbAttribute", 1) = 0 Then
ExcelSheet.Cells(RowNum, _
Count + 1).Value = _
Array1(Count).TagString
End If
End If
Next Count
RowNum = RowNum + 1
For Count = LBound(Array1) To UBound(Array1)
ExcelSheet.Cells(RowNum, Count + 1).Value _
= Array1(Count).TextString
Next Count
Header = True
End If
End If
End With
On Error Resume Next
Next elem
Excel.Application.Quit
Set Excel = Nothing
If Err.Number = 0 Then
MsgBox "Datei wurde unter: " & Pfad & " gespeichert"
If Err.Number = 2 Then
MsgBox "Abbruch durch benutzer"
If Err.Number = 3 Then
MsgBox "Abbruch durch benutzer"
Else
GoTo Ende:
End If
End If
End If
Ende:
End Sub
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP