| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Datenübergabe von Excel auf Attribute und umgekehrt (2847 mal gelesen)
|
Nat_Bambo Mitglied Techniker

 Beiträge: 44 Registriert: 13.04.2006
|
erstellt am: 23. Jun. 2006 11:50 <-- editieren / zitieren --> Unities abgeben:         
Hallo CAD-VBA- Spezialisten, ich bin neu hier. In der Suche habe ich ausführlich nachgeschaut, ob es VBA-Codes für mein Problem schon existieren. Leider bin ich nicht fündig geworden. Mein Problem ist folgendes. Was wir schon geschafft haben ist ein Excellisteimport nach ACAD. Nun möchte ich eine Verbindung von ACAD zur Excelliste herstellen. Wird in der Zeichnung das Objekt DN 65 z.B in DN 80 geändert, so soll in der Excelliste in der Tabelle 11, der Zelle I12, dieser geänderte Wert übernommen werden. Kann mir jemand bei meinem Problem helfen? Danke im Voraus. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
erstellt am: 23. Jun. 2006 12:11 <-- editieren / zitieren --> Unities abgeben:          Nur für Nat_Bambo
|
Nat_Bambo Mitglied Techniker

 Beiträge: 44 Registriert: 13.04.2006
|
erstellt am: 23. Jun. 2006 13:03 <-- editieren / zitieren --> Unities abgeben:         
Hallo Charsten, das ging aber mit der Antwort schnell. Der Link mit der ZIP-Datei, die eine Excelliste und dwg.zeichnung enthält, ist vermutlich das was ich benötige. Allerdings muß ich vielleicht in meiner Unerfahrenheit irgendetwas nicht richtig machen. Ich öffne beide Dateien. In der Excelliste drücke ich auf dem Button' Attribute einlesen' erscheint eine MSG-Box 'kein Block angewählt'. Nachdem ich den Block in dwg.Zeichnung angewählt, der in die Excelliste übertragen werden soll, angewählt habe, erscheint nach wie vor die MSG-Box'kein Block angewählt'. Was bedeutet das Blockhandle? Gruß
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002 AutoCAD ACA 2024 Solidworks 2022 Sp5 Enterprise PDM 2022 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell Precision 3660 Intel Core i9-12900K 32 GB Arbeitsspeicher 2x Dell U2415
|
erstellt am: 23. Jun. 2006 14:36 <-- editieren / zitieren --> Unities abgeben:          Nur für Nat_Bambo
|
Nat_Bambo Mitglied Techniker

 Beiträge: 44 Registriert: 13.04.2006
|
erstellt am: 26. Jun. 2006 09:35 <-- editieren / zitieren --> Unities abgeben:         
Hallo Carsten, danke Dir für Deinen Tipp. Ich habe mich über das Wochenende intensiv mit dem Thema beschäftigt und nochmals im Forum rumgestöbert. Mir erscheint der erste Link von Dir am ehestens für mein Problem geeignet zu sein. Allerdings habe ich überhaupt keine Ahnung wie die Syntaxbefehle für ACAD heißen. Gibt es für ACAD einen Makrorekorder, den man von Excel her kennt? Ich habe eine andere Idee: Du siehst hier ein Makroprogramm, mit der ich Excel und Word miteinander verbunden habe. Dieses könnte man doch auch für mein Problem hernehmen und entsprechend ändern. Sub Datenübertragung13() Dim strStückzahl1 strStückzahl1 = Worksheets("13").Range("A96").Value Dim ww As Object If Err.Number = 429 Then Set ww = GetObject(, "Word.Application") Else Set ww = CreateObject("Word.application") End If ww.Visible = True ww.Documents.Add ("N:\Allgemein\Jacob\Vorlagen\Tbau_Angebote\Angebot_Tanklager.doc") With ww .ActiveDocument.FormFields("Stückzahl1").Result = strStückzahl1 End With End Sub Dieses könnte dann so aussehen: Sub DatenübertragungExcelCAD() Dim strNennweite strNennweite = Worksheets("13").Range("I12").Value Dim ww As Object If Err.Number = 429 Then Set ww = GetObject(, "Autocad.Application") Else Set ww = CreateObject("Autocad.Application") End If ww.Visible = True ww.Documents.Add ("N:\Allgemein\Jacob\Vorlagen\Tbau_Angebote\Zeichnung_Brunnen.dwg") With ww .ActiveDocument.FormFields("Stückzahl1").Result = strNennweite End With End Sub Bei folgender Syntax ww.Documents.Add bin ich mir unsicher, ob diese richtig ist. Wie Eingangs erwähnt habe ich null Ahnung bezüglich ACAD- Syntax, sodass die Syntax .ActiveDocument.FormFields("Nennweite").Result = strNennweite für das ACAD Objekt anders heißen muß. Bin ich mit meinem Programm auf dem richtigen Wege und wie heißen die fehlerhaften bzw. fehlenden ACAD-Syntaxe. Danke Dir im Voraus. Freundliche Grüße
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 26. Jun. 2006 12:49 <-- editieren / zitieren --> Unities abgeben:          Nur für Nat_Bambo
Hallo Nat, > Gibt es für ACAD einen Makrorekorder, den man von Excel her kennt? Niente, negativ ;-) Probier das mit den 'Einlesen' aus der blockattr.dwg nochmal so:
Code:
Sub bla() Dim acApp As Object, acDoc As Object Dim fType%(0), fData(0), sset As Object, x As Object Dim r&, i%, attr Set acApp = GetObject(, "autocad.application") Set acDoc = acApp.ActiveDocument Set sset = acDoc.SelectionSets.Add("NewSet03") 'Block-Filter setzen fType(0) = 0: fData(0) = "INSERT" 'alle Blöcke wählen sset.Select acSelectionSetAll, , , fType, fData r = 2 For Each x In sset If x.HasAttributes Then Cells(r, 1) = acDoc.FullName Cells(r, 2) = x.handle Cells(r, 3) = x.name attr = x.GetAttributes For i = LBound(attr) To UBound(attr) Cells(r, i + 4) = attr(i).TagString Cells(r + 1, i + 4) = attr(i).TextString Next End If r = r + 2 Next sset.Delete End Sub
> Allerdings habe ich überhaupt keine Ahnung wie die Syntaxbefehle für ACAD heißen. Kopier Dir mal den Code zusätzlich in ein acad-Modul und setz' mal paar F1 ab auf so Schlüsselwörter wie Selectionset, Getattributes, AcadBlockreference. Acad hat zwar keinen Recorder wie Excel, aber dafür eine recht gute Hilfe;-) Dann kannst Du auch noch einen Verweis im Excel auf Acad machen, dann kennt dein Excel-VBE wenigstens im Tooltip paar Acad-Objecte/Methoden, allerdings setzt das trotzdem vorraus, dass Du dich erstmal etwas durch die Acad-Hilfe und auch durch das Acad-Lokalfenster wuseln musst. Fang also nicht zum Anfang in Excel an auf Acad zuzugreifen, sondern mach dich erstmal intern vertraut. Gruss Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nat_Bambo Mitglied Techniker

 Beiträge: 44 Registriert: 13.04.2006
|
erstellt am: 26. Jun. 2006 14:20 <-- editieren / zitieren --> Unities abgeben:         
Hallo Nancy, wow, ich habe das Programm installiert und es werden nun alle Attribute in die Excelliste eingelesen. Super. Nun kann ich zwischen dieser Excelliste und meiner Kalkulationsliste eine Verknüpfung schaffen. Wie funktioniert nun der Weg andersherum, wenn eine Änderung in der Excelliste erfolgt, so sollte sich das geänderte Objekt per VBA auch in der ACAD-Zeichnung ändern. Wenn das funktionieren sollte. Wow. Gruß
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 26. Jun. 2006 15:07 <-- editieren / zitieren --> Unities abgeben:          Nur für Nat_Bambo
Okay, hier noch andersrum, aber:- ohne Worksheet_Change-Event;-) - ohne irgendwelche Errorhandler - ohne irgendwelche Abgleiche der Namen/Reihenfolge - ohne Abgleich der richtigen dwg etc pp ... geprüft wird nur auf Übereinstimmung der Handles, Basis wieder die blockattr.dwg und blockattr.xls:
Code:
Sub blubb() Dim acApp As Object, acDoc As Object Dim fType%(0), fData(0), sset As Object, x As Object Dim r&, i%, attr Set acApp = GetObject(, "autocad.application") Set acDoc = acApp.ActiveDocument Set sset = acDoc.SelectionSets.Add("NewSet03") fType(0) = 0: fData(0) = "INSERT" sset.Select acSelectionSetAll, , , fType, fData 'Spalte B (Blockhandle) For r = 2 To Cells(Rows.Count, 2).End(xlUp).Row Step 2 For Each x In sset If Cells(r, 2) = x.handle Then If x.HasAttributes Then attr = x.GetAttributes For i = LBound(attr) To UBound(attr) attr(i).TagString = Cells(r, i + 4) attr(i).TextString = Cells(r + 1, i + 4) Next End If Exit For End If Next Next sset.Delete End Sub
... soviel mal zum Prinzip, musst Du jetzt ggf. selbst anpassen an deine Files, BTW in der Original-zip-xls sind ja auch noch Anregungen drin hinsichtlich Err & Co;-)HTH , Nancy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nat_Bambo Mitglied Techniker

 Beiträge: 44 Registriert: 13.04.2006
|
erstellt am: 26. Jun. 2006 15:47 <-- editieren / zitieren --> Unities abgeben:         
Hallo Nancy, du Heldin der Syntaxe. Jo, das war ein Riesenschritt in die richtige Richtung. Vielen Dank. Ein Problem habe ich noch. Da meine Kollegen mit Blöcken arbeiten, muß im Programm vorher die Blöcke geöffnet werden. Dabei sollen nur bestimmte Blöcke geöffnet werden. Die Auswahl soll über Checkboxen erfolgen, die sich auf einer Userform befinden. Ich weißt überhaupt nicht, ob dieses in ACAD möglich ist und ob das jetzige Programm dazu überhaupt geeignet ist. Nochmal vielen, vielen Dank für Deine bisherige Hilfe. Manchmal muß man sich fragen, woher ihr die Gabe habt, diese Syntaxe aus dem Ärmel zu schütteln. Gruß Uli
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 26. Jun. 2006 23:06 <-- editieren / zitieren --> Unities abgeben:          Nur für Nat_Bambo
Zitat: Original erstellt von Nat_Bambo:
Ich weißt überhaupt nicht, ob dieses in ACAD möglich ist und ob das jetzige Programm dazu überhaupt geeignet ist.
Hallo Uli, Na warum denn nicht? ;-) Das Autocad/VBA ist nix andres als das Office/VBA. Soll heissen, beide greifen auf die gleiche dll zu, nämlich die MsForms, zumindest hinsichtlich der Userforms. Ich denke das wäre schon machbar, der Weg wäre grob folgender: - User wählt Block/dwg aus - die werden geöffnet/eingefügt? - dann ziehst eine Schleife erstmal über alle offenen dwg's - dann eine zweite Schleife, wo du anhand deiner Mastertabelle? Dateiname/Blockhandle abgleichst? Ich kenne Deine/Eure Strukturen nicht genauer, sicher ist eines, machbar ist viel Die Antwort ist jetzt ziemlich global-pauschal, aber global-pauschal war ja auch die Frage;-) Uli, ich denke das ist der Punkt, wo du gefragt bist, das Werkzeug dazu hast Du nun - bastel' erstmal was draus, und wennde nicht weiter weisst - fragen ... lg, die Syntax-Lady ;;-)) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nat_Bambo Mitglied Techniker

 Beiträge: 44 Registriert: 13.04.2006
|
erstellt am: 27. Jun. 2006 10:56 <-- editieren / zitieren --> Unities abgeben:         
|
Nat_Bambo Mitglied Techniker

 Beiträge: 44 Registriert: 13.04.2006 Autocad Mechanical2011 Autodesk Inventor Routed Systems2011
|
erstellt am: 27. Jun. 2006 11:03 <-- editieren / zitieren --> Unities abgeben:         
Hallo Nancy, ich nochmal. Zu schnell, ich wollte Dir noch eine Frage stellen. In der Excelliste, in der die ganzen Attribute eingelesen werden, habe ich Formeln eingeben, die aber, aus welchen Gründen auch immer, nicht als Formel ausgeführt werden. An der Formatierung liegt es nicht. Hast Du eine Ahnung, woran das liegen könnte?. Da fällt mir ein: Ist es möglich, mit Öffnen einer ACAD-Zeichnung, das sich ein Button automatisch in die Befehlsleiste setzt. Der Code ist vorhanden, weiß aber nicht wo der Code hineingeschrieben werden soll. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 28. Jun. 2006 11:05 <-- editieren / zitieren --> Unities abgeben:          Nur für Nat_Bambo
|
Nat_Bambo Mitglied Techniker

 Beiträge: 44 Registriert: 13.04.2006
|
erstellt am: 29. Jun. 2006 12:45 <-- editieren / zitieren --> Unities abgeben:         
Hallo nancy, ich habe Dich nicht vergessen. Ich bin gerade von einer Geschäftsreise wiedergekommen. Die Links werde ich mir demnächst anschauen. Anbei die Excelliste, die mit Hilfe Deiner Codes die Daten aus ACAD in Excelliste importiert werden, in der keine Excelformeln geschrieben werden können. Ich hoffe der Anhang funzt. Ich danke Dir nochmal für Deine Hilfe. Gruß Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Nat_Bambo Mitglied Techniker

 Beiträge: 44 Registriert: 13.04.2006 Autocad Mechanical2011 Autodesk Inventor Routed Systems2011
|
erstellt am: 30. Jun. 2006 09:52 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |