Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  WBlock einfügen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  WBlock einfügen (3984 mal gelesen)
GüSo
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von GüSo an!   Senden Sie eine Private Message an GüSo  Schreiben Sie einen Gästebucheintrag für GüSo

Beiträge: 138
Registriert: 22.01.2009

Windows 7 Professional SP1, AutoCAD 2011, Office 2013
Windows 10, Office2019

erstellt am: 15. Jun. 2011 12:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 15. Jun. 2011 13:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für GüSo 10 Unities + Antwort hilfreich

Hi Günther,

tausche mal ein Thisdrawing gegen ein Activedocument.

HTHHope this helps (Hoffe, es hilft weiter) Nancy

[edit: zu lahmsam, Alfred war schneller;-) ]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

GüSo
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von GüSo an!   Senden Sie eine Private Message an GüSo  Schreiben Sie einen Gästebucheintrag für GüSo

Beiträge: 138
Registriert: 22.01.2009

Windows 7 Professional SP1, AutoCAD 2011, Office 2013
Windows 10, Office2019

erstellt am: 15. Jun. 2011 14:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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


Sehen Sie sich das Profil von GüSo an!   Senden Sie eine Private Message an GüSo  Schreiben Sie einen Gästebucheintrag für GüSo

Beiträge: 138
Registriert: 22.01.2009

Windows 7 Professional SP1, AutoCAD 2011, Office 2013
Windows 10, Office2019

erstellt am: 15. Jun. 2011 14:42    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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


Sehen Sie sich das Profil von startrek an!   Senden Sie eine Private Message an startrek  Schreiben Sie einen Gästebucheintrag für startrek

Beiträge: 1361
Registriert: 13.02.2003

.

erstellt am: 15. Jun. 2011 14:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für GüSo 10 Unities + Antwort hilfreich

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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


Sehen Sie sich das Profil von GüSo an!   Senden Sie eine Private Message an GüSo  Schreiben Sie einen Gästebucheintrag für GüSo

Beiträge: 138
Registriert: 22.01.2009

Windows 7 Professional SP1, AutoCAD 2011, Office 2013
Windows 10, Office2019

erstellt am: 16. Jun. 2011 07:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von a.n.:
>> AutoCAD.Application.ActiveDocument

Klingt 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


Sehen Sie sich das Profil von GüSo an!   Senden Sie eine Private Message an GüSo  Schreiben Sie einen Gästebucheintrag für GüSo

Beiträge: 138
Registriert: 22.01.2009

Windows 7 Professional SP1, AutoCAD 2011, Office 2013
Windows 10, Office2019

erstellt am: 16. Jun. 2011 07:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von GüSo an!   Senden Sie eine Private Message an GüSo  Schreiben Sie einen Gästebucheintrag für GüSo

Beiträge: 138
Registriert: 22.01.2009

Windows 7 Professional SP1, AutoCAD 2011, Office 2013
Windows 10, Office2019

erstellt am: 16. Jun. 2011 07:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich hatte mich verschrieben. Das sub LogoLoeschen(....) muß natürlich Sub LogoEinfügen(....) heißen.
Günter

------------------
MfG

Günter

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz