HI
nuja scheints sind alle hier "Helden der Arbeit"
ich habe oefeter das gleichgelagerte problem aus Listen irgendwelche Einbauteile, symbole etc. in Plaene einzufuegen.
Da ich ne faule ... bin mach ich folgendes:
1. Alle Bloecke die ich benoetige fasse ich in einem monsterblock zusammen und lade den in der Zeichnung. Nach dem Anzeigen des Blocks kann man den loeschen die blockdefinitionen bleiben dabei ja in der Zeichnung erhalten.
Nun baue ich mir eine Excel Tabelle mit den Angaben:
x,y,z Koordinaten,skalierung, rotation (RAD) und blocktyp (NAME)
Mit nachfolgendem code les ich die tabelle mittels VBA aus
und lasse die BLOCKREFERENZEN entsprechend einfuegen.
(Hierbei muss im VBA Excel asl Verweis gesetzt sein sonst kann es excel nicht ansteuern.)
Der untenstehende code muss bezueglich der Tabellenspalten noch angepasst werden.
Das ganze funktioniert noch wesentlich eleganter wenn man ne DATENBANKK z.B. mit ODBC anflanscht Vorzugsweise MySQL oder MariaDB - dann kann man die Tabellen Bueroweit zentral hosten und jeder hat zugriff darauf - Excel ist mehr ne bastelloesung fuer kleinere Sachen.
LG aus Finnland
Sub DRAW_plates_from_excel()
Dim blo As AcadBlockReference
Dim PoLin, sPoLin As Acad3DPolyline 'AutoCAD Polylinie
Dim Punkt(0 To 5) As Double 'Koordinaten des ersten Segments
Dim NeuPunkt(0 To 2) As Double
Dim MidPoint(0 To 2) As Double 'Koordintenfolgepunkte
Dim EPunkt(0 To 2) As Double 'Koordintenfolgepunkte
Dim wb As Excel.Workbook
Dim WTAB As Excel.Worksheet
Set wb = Excel.Workbooks.Open("C:\AP-OVERVIEW-3.xls")
Set WTAB = wb.Worksheets("AP")
Dim att As Variant
Dim attlist As Variant
nr = 7
Do While Sheets("AP").Cells(nr, 2) <> ""
X = Sheets("AP").Cells(nr, 15)
Y = Sheets("AP").Cells(nr, 16)
z = Sheets("AP").Cells(nr, 14)
D = Sheets("AP").Cells(nr, 27)
KKS = mid(Sheets("AP").Cells(nr, 4), 6, 8)
typ = "p" & Sheets("AP").Cells(nr, 25)
If Left(D, 1) = "R" And X <= 0 And Y <> 0 Then
If Left(D, 1) = "L" And X <= 0 Then Y = -Y
If Left(D, 1) = "R" And X > 0 Then Y = Y
NeuPunkt(0) = Y
NeuPunkt(1) = z
NeuPunkt(2) = X
Set blo = ThisDrawing.modelspace.InsertBlock(NeuPunkt, typ, 1, 1, 1, 0)
If blo.HasAttributes Then
attlist = blo.GetAttributes
For I = LBound(attlist) To UBound(attlist)
If attlist(I).TagString = "KKS" Then attlist(I).textstring = KKS
Next
End If
End If
Debug.Print KKS, typ, Y, z, X
nr = nr + 1
Loop
'Set WB = Excel.Workbooks.Close
End Sub
------------------
wer es nicht versucht, hat schon verlorn
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP