Ich hoffe ich bin hier richtig (eigentlich ist es ein Excel/VB Problem), da ich aus Excel Acad aufrufe.
Ich habe vor einiger Zeit bereits ein Programm geschrieben mit dem ich Attribute nach excel auslesen kann. Ich habe auch schon in verschiedenen Foren entsprechende Programme gefunden.
Hat auch alles funktioniert (ACAD Version 2000, Office 2000)
Nach langer Zeit benötige ich dieses Tool wieder und nichts funktioniert.
Ich vermute es liegt an der veränderten Umgebung (ACADMech 2006-2008, Office 2007)
Ich bekomme einfach keine Referenz auf den Block mehr ?
Folgendes Programm habe ich aus einem Forum geladen:
Sub getattr()
Dim cad As Object
Dim acad As AcadApplication
Dim autocad_gestartet As Boolean
Dim tempObj As AcadObject
Dim gpCode(0) As Integer
Dim dataValue(0) As Variant
Dim ssetObj As AcadSelectionSet
Dim bl As AcadBlockReference
Dim ip(0 To 2) As Double
Dim i, j, k, z As Long
Dim attr As Variant
autocad_gestartet = True
On Error Resume Next
Set cad = GetObject(, "AutoCAD.Application")
If Err.Number <> 0 Then
Err.Clear
MsgBox "AutoCAD ist nicht gestartet", vbOKOnly, "Fehler"
Exit Sub
End If
Set acad = cad
If IsNull(acad.ActiveDocument) Then
MsgBox "Keine Zeichnung geöffnet", vbOKOnly, "Fehler"
Exit Sub
End If
gpCode(0) = 0
dataValue(0) = "Insert"
Set ssetObj = acad.ActiveDocument.SelectionSets.Add("SS2")
' Set ssetObj = acad.ActiveDocument.SelectionSets.Add("")
AppActivate acad.Caption
ssetObj.SelectOnScreen gpCode, dataValue
AppActivate Application.Caption
j = 1
If ssetObj.Count > 0 Then
For i = 0 To ssetObj.Count - 1
Set bl = ssetObj.Item(i)
If bl.HasAttributes = True Then
Range("A" + Trim(Str(j + 1))).Select
ActiveCell.FormulaR1C1 = acad.ActiveDocument.FullName
Range("B" + Trim(Str(j + 1))).Select
ActiveCell.FormulaR1C1 = bl.handle
Range("C" + Trim(Str(j + 1))).Select
ActiveCell.FormulaR1C1 = bl.name
attr = bl.GetAttributes
z = Asc("D")
For k = LBound(attr) To UBound(attr)
Range(Chr(z) + Trim(Str(j + 1))).Select
ActiveCell.FormulaR1C1 = attr(k).TagString
z = z + 1
Range(Chr(z) + Trim(Str(j + 1))).Select
ActiveCell.FormulaR1C1 = attr(k).TextString
z = z + 1
Next k
j = j + 1
Else
MsgBox "Gewählte Blöcke haben keine Attribute!", vbOKOnly, "Meldung"
End If
Next i
Else
MsgBox "Keine Blöcke gewählt!", vbOKOnly, "Meldung"
End If
ssetObj.Delete
End Sub
Problem:
Set bl = ssetObj.Item(i)
liefert keinen Blockk zurück.
Für Hilfe wäre ich sehr dankbar !!!
Volker
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP