Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  externe Referenzen prüfen

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
  
PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
Autor Thema:  externe Referenzen prüfen (2418 mal gelesen)
PeterF
Mitglied



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

Beiträge: 30
Registriert: 11.08.2008

erstellt am: 06. Nov. 2008 19: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

Hallo,

ich möchte Pläne per VB Code auf das Vorhandensein von exteren Referenzen prüfen.

Auf dem ersten Blick bietet sich dafür ja die AcadFileDependencies Collection an.
Das funktioniert aber nur, wenn alle Dateien auch existieren.

Ansonsten kommt beim Durchlaufen der Collection

Dim myFD As AcadFileDependency

For Each myFD In ActiveDocument.FileDependencies
....
Next

direkt ein Fehler ("Das aufgerufene Object wurde von den Clients getrennt").
Die Count-Eigenschaft der Collection zeigt die zu erwartende Anzahl der Dateien an.
Wenn ich aber das Element 0 (z.b. ActiveDocument.FileDependencies(0).Feature) aufrufe, kommt auch sofort eine Fehlermeldung ("Schlüssel nicht gefunden"). Alle vorhandenen Dateiabhängigkeiten kann ich mir über den Index aufrufen.


Der zweite Weg wäre ja über die Blocks Collection mit der Prüfung auf die ISXref-Eigenschaft. Das kann aber unter Umständen recht lange dauern. Dann habe ich aber immer noch den Aufwand zu testen, ob die externe Referenz überhaupt existiert, Dann weiß ich immer noch nicht, ob diese geladen wurde (wenn nämlich ein Fehler beim Laden aufgetreten ist).

Nun endlich mein Fragen:

1. gibt es eine DXF-Code für die Selection von Xrefs
2. wie kann ich das ACAD Object AcadExternalReference für bereits vorhandene Xrefs benutzen (in der ACAD-Hilfe habe ich nur gefunden, dass man neue Referenzen erzeugen kann)
3. gibt es ein anderes Objekt was mir, wie der Xref-Manager sagen kann, welche Xrefs überhaupt in der Zeichnung vorhanden sein müssten, ob diese geladen wurden usw.
4. oder gibt es eine komplett anderen Weg?

Danke schon mal für Eure Antworten!

------------------
Viele Grüße aus dem Münsterland!

PeterF
--------------------------------------------
Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt.

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


Ex-Mitglied

erstellt am: 06. Nov. 2008 20:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

lade Dir mal mein Beispiel von http://ww3.cad.de/foren/ubb/Forum54/HTML/020951.shtml#000009
da ist Code vorhanden, der gleichzeitig auch prüft, ob ein XRef geladen ist oder nicht.

Die FileDependencies beinhalten mehr als nur XRef's, da gehören CTB-Files, Fonts, ... sprich alles, was auch bei 'etransmit' mitübertragen werden müsste (damit bin ich aber nicht wirklich vertraut).

Hoffe es hilft Dir (zumindest in den meisten Punkten) weiter, wenn noch etwas offen ist, (fast) jederzeit und gerne.


- alfred -

PeterF
Mitglied



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

Beiträge: 30
Registriert: 11.08.2008

erstellt am: 06. Nov. 2008 20: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

Hi alfred,

danke für die rasche Antwort.
Dein Code ist ja schon mal prima und hilft mir auch weiter. Die Eigenschaft XRefDatabase war das fehlende Rädchen im Getriebe, was aber immer noch schwer läuft. Ich sehe ein Problem auf mich zukommen, wenn es keinen dxf-Code gibt, der direkt externe Referenzen anspricht. "Insert" selektiert ja alle Blockreferenzen. In meinen Zeichnungen sind möglicherweise tausende davon drin. Da ist eine for each Schleife besser als nichts, aber auch nicht der schnellste Weg.

Also noch mal vielen Dank mit der Hoffnung, daß jemand einen Weg kennt, Xrefs direkt zu selektieren.

------------------
Viele Grüße aus dem Münsterland!

PeterF
--------------------------------------------
Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt.

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


Ex-Mitglied

erstellt am: 06. Nov. 2008 20:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

Du kannst natürlich statt der Selektion auf alle BlockReferences auch die Liste der Blocks (BlockDefinitionen) durchgehen, solange Du nicht wissen willst, ob diese überhaupt verwendet sind.

Dim tBl as AcadBlock
for each tBl in ThisDrawing.Blocks
  'und da hast jetzt die Blockdefinition
  'jetzt kann geprüft werden ob es sich um ein XRef handelt
next


- alfred -

PeterF
Mitglied



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

Beiträge: 30
Registriert: 11.08.2008

erstellt am: 07. Nov. 2008 08:06    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 alfred,

Danke für die Antwort.
Das habe uch auch schon so gemacht. Aber, wie du schon bemerkt hast, habe ich dann keine Kontrolle, ob die Referenz überhaupt verwendet wird.
Was mir gerade dabei einfällt. Man kann ja die Block-Collection durchlaufen. Wenn ein Block.IsXref=true dann ein Selectionset bilden mit dem Blocknamen.
So weiß ich, ob die Xref überhaupt verwendet wird. Mal testen, wie das mit den Laufzeitzeiten aussieht.

Aber dennoch bleibt die Frage, warum es einen Laufzeitfehler gibt, wenn man die FileDependencies-Collection durchlaufen will und eine Referenz nicht gefunden wurde? Sieht nach nicht abgefangenen Programmfehler aus.


Kommunikation erweitert immer wieder den Horizont! Danke!


ps: wiese steht der Topic auf einmal im Forum "Rund um AutoCad". Mir war so, als hätte ich ihn im VBA Forum verfasst. Wennn nicht, wie kann man ihn verschieben?

------------------
Viele Grüße aus dem Münsterland!

PeterF
--------------------------------------------
Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt.

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


Ex-Mitglied

erstellt am: 07. Nov. 2008 10:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Peter,

kannst mir eine Zeichnung zukommen lassen, in der FileDependencies-Collection einen Fehler bringen? Oder kommt das bei Dir in jeder Zeichnung?

- alfred -

PeterF
Mitglied



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

Beiträge: 30
Registriert: 11.08.2008

erstellt am: 07. Nov. 2008 11:16    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 alfred,

der Fehler kommt bei mir in jeder Zeichnung. Egal ob in ACAD-VBA oder extern über COM und VB.
Version: ACAD 2006 Version: Z.54.10

------------------
Viele Grüße aus dem Münsterland!

PeterF
--------------------------------------------
Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt.

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


Ex-Mitglied

erstellt am: 07. Nov. 2008 11:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Peter,

sorry, ich kann es nicht reproduzieren, ich habe eine leere Zeichnung offen, starte die Loop:

  Dim tObj As AcadFileDependency
  For Each tObj In ThisDrawing.FileDependencies
      Debug.Print tObj.Feature
  Next

und fliege dabei nicht ab, das Ergebnis im Output-Fenster:

Acad:Text
Acad:PlotConfig

D.h. ich fürchte, dass es doch zeichnungs- oder konfigurationsabhängig ist.

- alfred -

PeterF
Mitglied



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

Beiträge: 30
Registriert: 11.08.2008

erstellt am: 07. Nov. 2008 13:50    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 Alfred,

mit einer leeren Zeichnung geht es auch.
Erstelle mal eine neue Zeichnung und füge eine externe Referenz hinzu.
Dann speichere die Zeichnung und benenne die externe Referenz um. Nun öffne die neu erstellte Zeichnung. Da passiert erst mal noch nichts, außer dass die Xref nicht zu sehen ist.

Und nun kommt der Moment.

Dim myFD As AcadFileDependency

For Each myFD In ActiveDocument.FileDependencies  'an diese Stelle knallt es bei mir reproduzierbar.
....
Next 
 

------------------
Viele Grüße aus dem Münsterland!

PeterF
--------------------------------------------
Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt.

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


Ex-Mitglied

erstellt am: 07. Nov. 2008 14:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Peter,

ok, so kann ich's auch sehen. Gilt also doch nur in bestimmten Zuständen .

Hilft Dir das als Abhilfe?

Code:
  Dim tObj As Object
  Dim i As Integer
 
  For i = 0 To ThisDrawing.FileDependencies.Count - 1
      On Error Resume Next
      Set tObj = ThisDrawing.FileDependencies.Item(i)
      If (Err.Number <> 0) Or (tObj Is Nothing) Then
        Debug.Print "Unknown dependency, reference not found"
      Else
        'ok
      End If
      On Error GoTo 0
  Next

- alfred -

PeterF
Mitglied



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

Beiträge: 30
Registriert: 11.08.2008

erstellt am: 07. Nov. 2008 14:57    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 Alfred,

ich hab's ja nun schon anders, wie oben beschrieben gemacht. Also erst Blöcke durchlaufen (nicht die Referenzen) wenn IsXref Selectionset mit INSERT und Blocknamen bilden. Wenn dann mind. ein Objekt da ist, wurde die Xref geladen. Laufzeiten gehen bis jetzt auch, da ja nicht alle Blockreferenzen durchlaufen werden sondern nur die Definitionen. Das mit den FileDependencies war dann nur noch aus generellem Interesse.

Aber dennoch Danke für Deine Mühe!

------------------
Viele Grüße aus dem Münsterland!

PeterF
--------------------------------------------
Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt.

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

wwwilli
Mitglied
Ingenieur


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

Beiträge: 410
Registriert: 21.03.2006

ACAD MAP 3D 2012.
VestraCAD.
Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.

erstellt am: 07. Nov. 2008 14:59    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 PeterF 10 Unities + Antwort hilfreich

Hallo,
ich hatte bei den FileDependecies mit For Each auch immer Abbrüche, machte es dann erfolgreich mit .Count und On Error Resume Next, allerdings noch schlimmer als oben dargestellt, nämlich mit GoTo, aber das darf man ja fast nicht sagen.
Ich meine, du musst auch die Blocks durchsuchen, nicht nur die ThisDrawing.FileDependencies, also jeweils auch
ThisDrawing.Blocks(xxx).XRefDatabase.FileDependencies.Count

MfG,
wwwilli

[Diese Nachricht wurde von wwwilli am 07. Nov. 2008 editiert.]

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


Ex-Mitglied

erstellt am: 07. Nov. 2008 15:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Peter,

ein letzter Hinweis sei mir noch gestattet, wenn es denn wirklich mit Laufzeitproblemen zu tun hat:

Arbeitest Du mit VB6 oder mit VB.NET, denn wenn Du mit managed-code arbeitest, dann hättest du bei dem BlockTableRecord eine Eigenschaft, die Dir angibt, wieoft ein Element eingesetzt ist. In diesem Fall kannst Du direkt von BlockTableRecord auf die Referenzen hingreifen.

- alfred -

[Diese Nachricht wurde von a.n. am 07. Nov. 2008 editiert.]

PeterF
Mitglied



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

Beiträge: 30
Registriert: 11.08.2008

erstellt am: 07. Nov. 2008 16:20    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 Alfred,

da bin ich aber gespannt! Ich bin für jeden Tip dankbar. Z.z. läuft die Anwendung noch unter VB6, soll aber neu auf VB.NET entwickelt werden.
Eine Konvertierung wird leider mehr Aufwand machen, als vernüftigen neuen Coden zu programmieren.

Mal nebenbei: Kommst Du manchmal auch zu was anderem, als im Forum auf mehr oder weniger qualifizierte Fragen zu antworten. Ich finde es ja gut, dass es solche wie Dich gibt, hätte aber persönlich nie die Zeit dazu.

Bleib uns erhalten!

------------------
Viele Grüße aus dem Münsterland!

PeterF
--------------------------------------------
Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null. Das nennen sie dann ihren Standpunkt.

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)2024 CAD.de | Impressum | Datenschutz