| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | PNY Technologies Quadro auf der Hannovermesse 31.03.-04.04.2025 | Hall 17, Stand F16, eine Veranstaltung am 31.03.2025
|
Autor
|
Thema: WBlock einfügen (4385 mal gelesen)
|
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 15. Jun. 2011 12:44 <-- editieren / zitieren --> Unities abgeben:         
Hallo allerseits! Ich will in mehrere Zeichnungen einen Wblock (Logo) einfügen. Dieser WBlock enthält seinerseits wiederum einen Block, der einen M-Text darstellt. Dieser MText-Block hat einen Namen, der ungleich dem der WBlock-Datei ist. Dieser Block wird eingefügt und anschließend gesprengt. Der WBlock wird dann aus der Zeichnung gelöscht. Code:
Sub LogoEinfügen() 'Fügt das Logo als Block ein. Das Logo liegt als W-Block in D:\vrs_logo.dwg Dim Symbol As AcadBlockReference, Einfpkt(0 To 2) As Double, ii As Long Einfpkt(0) = 128.75: Einfpkt(1) = 13#: Einfpkt(2) = 0 If BlockExistiert("logo") = True Then 'Funktion aufrufen, ob Block "logo" schon in Zeichnung existent Set Symbol = ThisDrawing.ModelSpace.InsertBlock(Einfpkt, "logo", 0.8, 0.8, 0.8, 0) Else 'Wblock einfügen und anschließend auflösen und löschen Set Symbol = ThisDrawing.ModelSpace.InsertBlock(Einfpkt, "D:\vrs_logo.dwg", 0.8, 0.8, 0.8, 0) Symbol.Explode Symbol.Delete 'Symbol.Update End If ThisDrawing.Regen (acActiveViewport) End Sub
Das Ganze funktioniert auch, aber nur einmal. Ich lese alle Zeichnungen mit einem Mal ein und blättere dann durch diese Dokumentensammlung, indem ich jeweil das nächse aktiviere. Beim zweiten Dokument kommt dann beim Öffnen der DWG-Datei die Meldung Dateifehler. Ich vermute, daß vom ersten Öffnen der Datei her noch was im Speicher steht. Wie kann ich das aber löschen? Wo könnte was stehen? Gruß Günter
------------------ MfG Günter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Jun. 2011 12:50 <-- editieren / zitieren -->
Hi, >> und blättere dann durch diese Dokumentensammlung, indem ich jeweil das nächse aktiviere. >> Beim zweiten Dokument kommt dann beim Öffnen der DWG-Datei die Meldung Dateifehler An der Routine, die Du zeigst, sehe ich nur einen kritischen Punkt, der nennt sich 'ThisDrawing'! Wenn Du während des Ablaufs in einer Schleife durch mehrere AcadDocuments auf ThisDrawing hingreifst, dann prüf doch erst mal, ob das überhaupt auf die richtige (gerade auf aktuell gestellte) DWG verweist. Ansonsten brauchen wir den Code, wie Du durch die Documents durchiterierst. - alfred - ------------------ www.hollaus.at |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 15. Jun. 2011 13:09 <-- editieren / zitieren --> Unities abgeben:          Nur für GüSo
|
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 15. Jun. 2011 14:07 <-- editieren / zitieren --> Unities abgeben:         
Hi, ich habe nun mehrere Möglichkeiten getestet. Zunächst habe ich das ThisDrawing durch ActiveDocument ersetzt. Ergebnis war der gleiche Fehler. Als nächste Variante nicht mehr alle Zeichnung mit einem male geöffnet, sondern mit Hilfe des FileSystemobjects mir den betreffenden Ordner verfügbar gemacht und dann durch diesen File für File durchiteriert und dann Zeichnung öffnen, bearbeiten, speichern und schließen. Aber immer das gleiche Ergebnis. Bei der zweiten geöffneten Datei (zweiter Durchlauf) bleibt er an diesem Befehl mit Dateifehler hängen: Set Symbol = AutoCAD.Application.ActiveDocument.ModelSpace.InsertBlock(Einfpkt, "D:\vrs_logo.dwg", 0.8, 0.8, 0.8, 0) Ich vermute sehr stark, daß diese Datei noch vom ersten Durchlauf her vom System gesperrt ist. Jetzt ist mein Problem, wie kann ich das prüfen und per Programm die Sperrung aufheben? Günter ------------------ MfG Günter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Jun. 2011 14:15 <-- editieren / zitieren -->
Hi, >> AutoCAD.Application.ActiveDocument Klingt mehr nach VB.NET als nach VBA, oder? Und das Öffnen der Zeichnung bedeutet nicht zwangsweise, dass es auch das 'ActiveDocument' ist, prüf das mal indem Du einen Breakpoint an dieser Stelle machst und den Begriff AutoCAD.Application.ActiveDocument.Name überprüfst. - alfred - ------------------ www.hollaus.at |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 15. Jun. 2011 14:42 <-- editieren / zitieren --> Unities abgeben:         
Nein das wars auch nicht. Ich habe den befehl modifiziert: set Symbol= zeichnung.modelspace.insertblock( ....) Das Ganze läuft in einer separaten Funktion, die die Zeichnung übergeben bekommt. private sub LogoLoeschen( byref Zeichnung as AcadDocument) ... .... end sub Günter ------------------ MfG Günter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Jun. 2011 14:53 <-- editieren / zitieren -->
Hi, >> Das Ganze läuft in einer separaten Funktion, die die Zeichnung übergeben bekommt. Den Zusammenhang versteh ich jetzt nicht ganz. Was ich aber sehe: Die Sub LogoEinfügen() bekommt aber keine Zeichnung als Parameter übergeben, in welche das Logo einzufügen ist. Und wir sehen noch immer nicht, wie Du die Iteration durch die Dokumente durchläufst (bzw. die Documents lädst und dann verwendest). Ich glaube noch immer daran, dass dort das Problem lauert. Ich hätte zumindest noch nie ein Problem damit gehabt, einen Block mehr als einmal einzufügen. OT: Gibt es eigentlich einen Grund den eingefügten Block zu explodieren? ...bzw. in der einzufügenden Zeichnung einen Block zu definieren (denn deswegen hast Du 2 verschiedene Blocknamen und musst auch einmal explodieren). - alfred - ------------------ www.hollaus.at |
startrek Moderator Architekt
   
 Beiträge: 1361 Registriert: 13.02.2003 .
|
erstellt am: 15. Jun. 2011 14:53 <-- editieren / zitieren --> Unities abgeben:          Nur für GüSo
Bei mir harkte es auch in jeder neuen Zeichnung mit F8, lief erst weiter, nachdem ich irgendwas im Code geändert hatte (set symbol=nothing o.ä. Dinge). Bei der nächsten Zeichnung same Problem. Bei mir gings jetzt via extra Pfadvariable: Code:
pfad = "E:\cad\neuer Block.dwg" Set Symbol = ActiveDocument.ModelSpace.InsertBlock(Einfpkt, pfad, 0.8, 0.8, 0.8, 0)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 15. Jun. 2011 14:57 <-- editieren / zitieren -->
Hi Nancy, >> Bei mir gings jetzt via extra Pfadvariable: Oh ja, da war mal was! Blockname erst in Variable, dann Variable verwenden. - alfred -
------------------ www.hollaus.at |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 16. Jun. 2011 07:18 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von a.n.: >> AutoCAD.Application.ActiveDocumentKlingt mehr nach VB.NET als nach VBA, oder? [/B]
Ich habe dieses Konstrukt schon mehrfach in VBA verwendet. Meines Wissens nach ist doch das Applications-Objekt das Rootobjekt im ACAD-VBA und mit dem Start des VBA-Editors automatisch verfügbar. Zumindest habe ich seinerzeit die Beschreibung von Autodesk so verstanden. Günter ------------------ MfG Günter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 16. Jun. 2011 07:24 <-- editieren / zitieren --> Unities abgeben:         
Ja genau, das war`s. Nachdem ich den Zwischenschritt mit der Variablenzuweisung eingefügt habe funktioniert es. Es wäre natürlich mal interessant, warum, bzw. was der funktionale Unterschied in der Abarbeitung ist. Aber ich denke das würde zu weit in die Details der VBA-Werkzeuge führen und hat für den Endanwender wenig praktischen Nutzen. Wichtig ist, daß man`s weiß und sich zu gegebener Zeit daran erinnert. Jedenfalls ist das Problem für mich, Dank Eurer Hilfe, nun geklärt. Dafür erstmal Vielen Dank Günter ------------------ MfG Günter Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
GüSo Mitglied Elektrotechniker
 
 Beiträge: 141 Registriert: 22.01.2009 Windows 7 Professional SP1, AutoCAD 2011, Office 2013 Windows 10, Office2019
|
erstellt am: 16. Jun. 2011 07:28 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |