Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Xref Entfernen und Neuladen via VBA

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:  Xref Entfernen und Neuladen via VBA (3016 mal gelesen)
Ecko
Mitglied
Ingenieur


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

Beiträge: 56
Registriert: 15.09.2011

AutoCAD P&ID 2011
Windows 7 32bit

erstellt am: 15. Sep. 2011 16:39    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 Zusammen.

Ich suche nach einer Möglichkeit mittels VBA bestimmte Referenzen zu entfernen (auszublenden) und dafür andere neu zu laden.

Hintergrund ist folgender:
Wir arbeiten seid neuestem mit AutoCAD P&ID und haben Fließbilder in vielen Varianten. Diese Fließbilder sind in Einzelsysteme unterteilt, welche unterschiedlich miteinander kombiniert werden sollen.

Dazu möchte ich nun per VBA Referenzen gegeneinander austauschen.

Könnt Ihr mir helfen, mit welchen Befehlen ich arbeiten muss? Ich finde vor allem nicht den Befehl, mit welchem man den "Status" der Referenz ansprechen kann.

Dankeschön!

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil
Inventor AIP 4-11, 2008 -2022
Win 10

erstellt am: 15. Sep. 2011 17:00    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 Ecko 10 Unities + Antwort hilfreich

Statt die Referenzen zu entfernen und neu zu laden, kann man auch einfach den Einfügepunkt der externen Refernenz auf einen separaten Layer legen und dann einfach diesen Layer Frieren/Tauen (nicht Ein/aus).

Ansonsten mit
sendcommand und

Code:
Befehl: -xref
Option eingeben [?/Binden/Lösen/Pfad/Entfernen/Neuladen/Überlagern/Zuordnen]
<Zuordnen>: e
Namen der zu entfernenden XRef(s) eingeben:

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

Ecko
Mitglied
Ingenieur


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

Beiträge: 56
Registriert: 15.09.2011

AutoCAD P&ID 2011
Windows 7 32bit

erstellt am: 16. Sep. 2011 07:47    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 Udo,

vielen Dank für deine Antwort.
Deine vorgeschlagene Vorgehensweise mit den Layern funktioniert händisch schon mal super!

Nun habe ich mal gehört, das "Sendcommand" nicht die "effektivste" Form des Ansprechens ist.

Aus eurer Erfahrung: Welche Vorgehensweise erscheint sinnvoll für mein Vorhaben?


Edit: Ich stehe gerade noch vor einem konkreten Problem.

Ich habe ein UserForm mit zwei Buttons angelegt.
Der eine Button soll Layer_1 tauen und Layer_2 freezen, der zweite Button soll genau das Gegenteil tun.

Ich starte also mit allen Layern getaut und klicke auf Button_1.
Wie gewünscht wird Layer_2 gefroren und Layer_1 bleibt sichtbar.

Klicke ich nun auf Button_2 ändert sich zwar im Layermanager alles wie gewünscht, aber auf dem Blatt wird nun auch Layer_1 unsichtbar.
Layer_2 wird nicht dargestellt! Woran liegt das?

Besten Dank!


Private Sub CommandButton1_Click()

Dim KüWa_1_Layer As AcadLayer
Dim KüWa_2_Layer As AcadLayer


Set KüWa_1_Layer = ThisDrawing.Layers("KüWa_1")
Set KüWa_2_Layer = ThisDrawing.Layers("KüWa_2")

KüWa_1_Layer.Freeze = False
KüWa_2_Layer.Freeze = True


Application.Update

End Sub


Private Sub CommandButton2_Click()

Dim KüWa_1_Layer As AcadLayer
Dim KüWa_2_Layer As AcadLayer

On Local Error Resume Next

Set KüWa_1_Layer = ThisDrawing.Layers("KüWa_1")
Set KüWa_2_Layer = ThisDrawing.Layers("KüWa_2")

KüWa_1_Layer.Freeze = True
KüWa_2_Layer.Freeze = False


Application.Update

End Sub

[Diese Nachricht wurde von Ecko am 16. Sep. 2011 editiert.]

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 16. Sep. 2011 10: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 Ecko 10 Unities + Antwort hilfreich

Vielleicht solltest Du noch einmal regenerieren.
Beim Update wird die Zeichnungsdatenbank nicht neu aufgebaut, deshalb bleiben die Elemente der getauten Layer weiterhin unsichtbar.

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

Ecko
Mitglied
Ingenieur


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

Beiträge: 56
Registriert: 15.09.2011

AutoCAD P&ID 2011
Windows 7 32bit

erstellt am: 16. Sep. 2011 11:22    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

Vielen Dank!!!!

Mit diesem Befehl klappt es wunderbar!

ThisDrawing.Regen acAllViewports

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

Ecko
Mitglied
Ingenieur


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

Beiträge: 56
Registriert: 15.09.2011

AutoCAD P&ID 2011
Windows 7 32bit

erstellt am: 20. Sep. 2011 09:31    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!

Ich versuche gerade, das Ganze zu erweitern. Ich möchte die Referenzen über 2 oder mehrere "Zeichnungs-Ebenen" anwenden.

Bsp: Es gibt eine Hauptzeichnung, welche sich per xref andere Unter-Zeichnungen einläd. Diese Unter-Zeichnungen sollen wiederum auf noch tiefere Zeichnungen zugreifen.

Das Ganze soll aus dem User-Form der Hauptzeichnung aus gesteuert werden.

Ich möchte konkret per Togglebutton einen Layer der Unter-Zeichnung aus/an-schalten.
Der Layer wird in der Unter-Zeichnung tatsächlich gefroren/getaut, es wird auch die Zeichnung aktualisiert. Trotzdem ist in der Hauptzeichnung keine Veränderung sichtbar.

Erst wenn ich im Fenster manuell "regen" eintippe, wird die Zeichnung richtig dargestellt.

Habt ihr einen Tipp für mich?


Private Sub ToggleButton1_Click()

Dim KüWa_1_PWT_1_Layer As AcadLayer

'On Local Error Resume Next

Set KüWa_1_PWT_1_Layer = Documents("KüWa_1.dwg").Layers("KüWa_1_PWT_1_Layer")

If ToggleButton1.Value = True Then

KüWa_1_PWT_1_Layer.Freeze = True

Else

KüWa_1_PWT_1_Layer.Freeze = False

End If

ThisDrawing.Regen acAllViewports

End Sub


Gibt es die Möglichkeit, den layerstatus einer NICHT-geöffneten Zeichnung zu verändern? Momentan muss die Zeichnung geöffnet sein, damit der Layerstatus geändert werden kann.

Besten Dank und Gruß

Ecko

[Diese Nachricht wurde von Ecko am 20. Sep. 2011 editiert.]

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 20. Sep. 2011 13:52    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 Ecko 10 Unities + Antwort hilfreich

Ist mir nicht ganz klar was Du machen möchtest.

Einen Layerstatus in einer per Xref geöffneten Zeichnung DAUERHAFT ändern?

Oder nur in der aktuellen Zeichnung vorübergehend ausschalten.

Im letzter Fall wäre es wohl das einfachste über

Code:
Set KüWa_1_PWT_1_Layer = ThisDrawing.Layers("KüWa_1|KüWa_1_PWT_1_Layer")


diesen anzusprechen

Zur Erklärung: Vor dem "|" ([Alt Gr]+[<>|] auf deutscher Tastatur) steeht der Zeichnungsname, danach der Layername.

Vielleicht hilft's ja ...

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

Ecko
Mitglied
Ingenieur


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

Beiträge: 56
Registriert: 15.09.2011

AutoCAD P&ID 2011
Windows 7 32bit

erstellt am: 20. Sep. 2011 13:56    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 KlaK, 

ja ich möchte den Layerstatus dauerhaft ändern.

Im Grunde funktionert es auch schon. Die Zeichnung muss dazu halt geöffnet sein.(wäre schön wenn das auch ohne klappen könnte)

Und das Regenerieren führt nicht dazu, dass der neue Layerstatus korrekt dargestellt wird.
Wie gesagt: Im Layermanager wird der neue Layerstatus richtig dargestellt!

Liegt es vielleicht am "thisdrawing.regen"? Ich möchte am liebsten, dass das komplette Projekt regeneriert wird.

Gruß
Ecko

[Diese Nachricht wurde von Ecko am 20. Sep. 2011 editiert.]

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 20. Sep. 2011 17: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 Nur für Ecko 10 Unities + Antwort hilfreich

Hallo Ecko,

Eine Methode von VBA aus ohne die referenzierte Zeichnung direkt zu öffnen, kenne ich jetzt auch nicht.
In VB / VS könnte man sie ohne Darstellung öffnen und mit den Änderungen speichern, das wäre vielleicht noch eine Alternative.

Hast Du die XRef geändert, sollte in der Masterzeichnung natürlich ein XRef.reload erfolgen, damit die Änderungen auch übernommen werden.

Aber gibt es denn einen Sinn die Änderungen in der Ausgangszeichnung durchzuführen?
Habt Ihr VISRETAIN überall auf 0? Ansonsten zählen ja die in der aktuellen Zeichnung gespeicherten Layereinstellungen.

Grüße,
Klaus

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

Ecko
Mitglied
Ingenieur


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

Beiträge: 56
Registriert: 15.09.2011

AutoCAD P&ID 2011
Windows 7 32bit

erstellt am: 21. Sep. 2011 13:27    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 Klaus,

den Befehl reload konnte ich zwischenzeitlich implementieren. hat zwar etwas gedauert, aber es ging. Ich habe es aber geschafft, ohne neuladen der Xref's zum gewünschten Ergebnis zu kommen.

Visretain ist in allen Zeichnungen = 0.

Dein Tipp mit "ThisDrawing.Layers("KüWa_1|KüWa_1_PWT_1_Layer")"
brachte den Erfolg.

Ich friere jetzt aus der Hauptzeichnung die Layer aller Unter-Zeichnungen bzw. taue sie auf.
Danach noch ein "thisdrawing.regen acallviewports" und es läuft.

Die Unterzeichnungen werden davon bislang völlig kalt gelassen, d.h. der Layerstatus ändert sich nur in er Hauptzeichnung.
Das reicht für mich völlig aus.

Das Beste: Die Unter-Zeichnung muss dafür nicht geöffnet sein!

Vielen Dank! Üs kommen!

[Diese Nachricht wurde von Ecko am 21. Sep. 2011 editiert.]

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 21. Sep. 2011 14:13    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 Ecko 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Ecko:
Visretain ist in allen Zeichnungen = 0

Hat zwar jetzt nichts mit VBA zu tun aber:
Du weißt schon, dass damit die Änderungen des Layerstatus der ref. Zeichnungen in deiner Hauptzeichnung nicht gespeichert werden.
Sprich: Beim nächsten Öffnen der Hauptzeichnung ist die Darstellung wieder so wie in der XRef. Die gemachten Änderungen müssen neu eingestellt werden (aber vielleicht ist das ja der Sinn des Programmes).

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