| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Excel Routinen von ACAD aus ausführen (1990 mal gelesen)
|
domda0 Mitglied
Beiträge: 149 Registriert: 21.04.2004
|
erstellt am: 13. Feb. 2011 18:49 <-- editieren / zitieren --> Unities abgeben:
Hallo,ich hoffe Ihr könnt mir weiterhelfen. Ich habe einige Schritte die ich gerne zusammenfassen würde und weiß nicht genau wie. Chronologisch aufgelistet mach ich folgende Dinge: 1.) attout - Speichern unter C:/test.txt - Auswählen aller Blöcke 2.) vba "CoordEntry" (aus diesem forum) aufrufen Die SChließen Funktion hab ich derzeit ausgenommen und müsste sie durch eine speichern funkt ersetzen Code: Dim ExcelApp As Object Dim ExcelWb As Object Dim i As Integer Dim ExcelWorksheet As ObjectPublic Sub CoordEntry() Set ExcelApp = CreateObject("Excel.Application") 'ExcelApp.Visible = True Set ExcelWb = ExcelApp.workbooks.Open("c:\test.txt") Set ExcelWorksheet = ExcelWb.sheets("test") 'activesheet 'ExcelApp.Quit 'Set ExcelApp = Nothing: Set ExcelWb = Nothing: Set ExcelWorksheet = Nothing End Sub
3.) Im Excel vba "sbHL" aufrufen
Code: Option ExplicitSub sbHL() Dim liRow As Integer, liCol As Integer, liHP As Integer, liHL As Integer, lstrHL As String For liCol = 1 To Cells(1, Columns.Count).End(xlToLeft).Column If LCase(Cells(1, liCol).Value) = "homepage" Then liHP = liCol End If If LCase(Cells(1, liCol).Value) = "hyperlink" Then liHL = liCol End If Next For liRow = 2 To Cells(Rows.Count, 1).End(xlUp).Row lstrHL = Cells(liRow, liHP).Value & "/" For liCol = 1 To Cells(1, Columns.Count).End(xlToLeft).Column If liCol <> liHP And liCol <> liHL Then lstrHL = lstrHL & Cells(1, liCol).Value & "=" & Cells(liRow, liCol).Value & "&" End If Next lstrHL = Left(lstrHL, Len(lstrHL) - 1) ActiveSheet.Hyperlinks.Add Anchor:=Cells(liRow, liHL), Address:=lstrHL, TextToDisplay:=lstrHL Next End Sub
4.) Speichern der Datei und Excel schließen 5.) attin - Auswählen der Datei C:/test.txt 6.) Aufrufen des Lisp Prog "sethl" Code: (defun c:sethl ( / ss hyp ) (vl-load-com) ;; © Lee Mac 2010 (if (ssget '((0 . "INSERT") (66 . 1))) (progn (vlax-for obj (setq ss (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) (mapcar (function (lambda ( x ) (if (eq "HYPERLINK" (strcase (vla-get-TagString x))) (progn (vlax-for h (setq hyp (vla-get-Hyperlinks obj)) (vla-delete h) ) (vla-Add hyp (vla-get-Textstring x)) ) ) ) ) (vlax-invoke obj 'GetAttributes) ) ) (vla-delete ss) ) ) (princ) )
Danke euch schon im voraus für jegliche Hilfe Dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 13. Feb. 2011 19:47 <-- editieren / zitieren -->
Hi, das ist mitunter zeichnungsabhängig, also eine Zeichnung mit den Blöcken ist da auch notwendig, um alles nachvollziehen zu können. Und das kurz zusammengefasst, korrigiere mich bitte, wenn ich etwas beim Überfliegen Deiner Vorstellung zu sehr 'überflogen habe': - Du brauchst Excel eigentlich nur, um einen Hyperlink im AutoCAD aus Blockattributen zu machen? Das geht leichter/direkt in VBA. - Mach mal eine DWG vor der Zuweisung der Hyperlinks und eine, in der Du das manuell machst (am Beispiel von ein paar Blöcken) und lade dieses hier hoch, dann geht's weiter. - alfred - ------------------ www.hollaus.at |
domda0 Mitglied
Beiträge: 149 Registriert: 21.04.2004
|
erstellt am: 13. Feb. 2011 22:07 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, anbei ein gerade zusammengebastelter Ausschnitt Excel benötige ich einerseits nur für die Vergabe des Hyperlinks (mir ist nichts besseres eingefallen...), andererseits gefällt mir das fertige txt file so dass ich es als Grundlage für unsere Datenbankinfos nehmen möchte. (Erspart mir die zusätzlichen Datenextraktion) Dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 14. Feb. 2011 10:36 <-- editieren / zitieren -->
Hi, ok, hier mal ein VBA, das alles in AutoCAD macht, dass ATTOUT (bereits mit ausgefüllten Attributen) kannst Du ja immer noch machen. Anwendung: das DVB-File in den AutoCAD-Graphikbereich ziehen und fallen lassen (damit wird es geladen), dann Befehl _VBARUN und im Dialog dieses: BlAtt_to_HyperLink_AN01.dvb!ThisDrawing.convertBlAtt_to_Hyperlink auswählen und Button 'Ausführen'. Da werden sowohl das Attribut HYPERLINK als auch der Hyperlink selbst gesetzt. VORSICHT: dieses ist nicht ausreichend getestet, vorher speichern, nachher kontrollieren VORSICHT: ich habe jetzt nicht alle Attribute durchgebaut für das Zusammensetzen des HYPERLINKS, aber die Vorlage hast Du damit jetzt. HTH, - alfred - ------------------ www.hollaus.at |
domda0 Mitglied
Beiträge: 149 Registriert: 21.04.2004
|
erstellt am: 14. Feb. 2011 21:12 <-- editieren / zitieren --> Unities abgeben:
Hallo, und danke erstmal für die schnelle und zahlreiche Hilfe ! @Alfred Danke vielmals, hab gerade getestet (ohne weiterbauen) und bin begeistert. Hab jedoch noch ein paar Fragen dazu (da meine Vorlage kläglich falsch war (sorry)) Hab das erste Mal Blöcke mit verschiedenen Attributen verwendet. Kann ich irgendwie einfach vermeiden dass im Hyperlink Attribute mit <> auftauchen (Attribute die in diesem Block nicht vorhanden sind beim Zusammenbasteln des Hyperlinks ausnehmen?) Andererseits könnte ich diese bei der Abfrage an die html auch ignorieren... --> Ist eher ein Schönheitsfehler... Die zweite wichtigere Sache ist dass das Schreiben des Hyperlinks, durch die Abfrage ob im Attributstext Hyperlink drinsteht, beim ersten mal funktioniert jedoch nicht "updatefähig" bleibt. --> Nach Änderung diverser Stromkreise oder Herstellerangaben (Austausch eines Produktes) sollte der User das Makro starten können um damit die Hyperlinks auf die Änderungen upzudaten. Vielleicht kannst mir sagen welche Passage ich da entfallen lassen kann. (Habs probiert,--> Null gefunden, Null geändert, "Null" vor dem PC versteht nur Spanisch) Danke !! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
domda0 Mitglied
Beiträge: 149 Registriert: 21.04.2004 ACAD 2014
|
erstellt am: 14. Feb. 2011 22:07 <-- editieren / zitieren --> Unities abgeben:
Noch eine Sache ist mir aufgefallen,... Bei der Acad Variante über vba muss ich mittels Definition alle Attribute die vorkommen können separat definieren. Bei der Excel Variante nicht, hierbei ist es egal wieviele Spalten von aatout ausgegeben werden. Kann das bei der Acad-Variante vereinfacht werden (Nur Att's des jeweiligen Blocks auslesen, wie oben schon ansatzweise erwähnt), oder muss ich hier manuell alle vorkommenden Attribute schon im Vorfeld wissen? Da in der Gebäudetechnik immer wieder Installationen dazukommen kann ich im Vorfeld schwer die Attribute abstecken, welche ich bei einer zusätzlichen Lichtsteuerung oder Alarmanlage noch benötigen werde. Dann müsste ich die Programmierung für das setzen des Hyperlinks immer anpassen, oder? Beim attout -> excel --> attin wäre das zu vernachlässigen gewesen. lg Dominik Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 14. Feb. 2011 22:19 <-- editieren / zitieren -->
Hi, anbei aktualisiert, wobei die einzelnen Attribute von mir jetzt nicht überprüft sind (insbesondere EDV-Kreis-1 kommt 2 mal vor, einmal statt Underline mit Bindestrich, weiss nicht, ob das richtig ist, wie ich es als richtig gesehen hätte, darum prüfen! (Ebenso ob am Abschluss für Dich jetzt ein '&' im Hyperlink gesetzt wird oder nicht) >> Kann ich irgendwie einfach vermeiden dass im Hyperlink Attribute mit <> auftauchen
Ja, ich hätte in aktuellem Code mal geprüft, ob der String leer ist, wenn JA, wird dieser nicht ausgegeben, z.B.:
Code: If Len(tSchaltGr) > 0 Then tHyperLinkStr = tHyperLinkStr & "SCHALTGRUPPE=" & tSchaltGr & "&"
>> Attributstext Hyperlink drinsteht, beim ersten mal funktioniert jedoch nicht "updatefähig" bleibt
Auch im Code modifiziert, sollte aber mit ein wenig VBA-Wissen auch für Dich möglich sein, diese Zeile ist modifiziert:
Code: 'statt dieser Zeile: 'tRetVal = (tHasAtt_HOMEPAGEvalue And tHasAtt_HYPERLINKvalue) 'so ausführen: tRetVal = (tHasAtt_HOMEPAGEvalue)
- alfred - ------------------ www.hollaus.at |
domda0 Mitglied
Beiträge: 149 Registriert: 21.04.2004
|
erstellt am: 14. Feb. 2011 22:56 <-- editieren / zitieren --> Unities abgeben:
Hallo Alfred, Danke vielmals für die Hilfe, EDV Kreis 1 ist mir auch vorhin aufgefallen (das mit_ ist mir beim löschen durch die Lappen gegangen) Beim Code verstehe ich glaub ich echt zu wenig, hab da bei dem Inhalt des HYPERLINKvalue bzw. bei der Abfrage oben herumgepfuscht. Ich glaub ich seh den Wald vor lauter Bäumen nicht mehr, Danke jedenfalls, Dominik Ach ja definitiven Schulungstermin gibt#s noch keinen ;-) 2011 ist aber mal mit viel gutem Willen ein Ziel.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|