| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| | |
 | SOLIDWORKS Composer, ein Seminar am 17.12.2025
|
|
Autor
|
Thema: API:GetReferencedModelName (2019 mal gelesen)
|
katy Mitglied
 Beiträge: 4 Registriert: 05.12.2001
|
erstellt am: 05. Dez. 2001 11:17 <-- editieren / zitieren --> Unities abgeben:         
Hallo, ich habe ein Problem: Ich habe ein VB-Programm, in dem ich aus einer geöffneten Draw Datei den Namen der referenzierten Datei auslese. Nun kann es aber sein, dass mal eine Datei offen ist, die keine dazugehörige Datei hat. Bei dem Befehl referenz = part.GetReferencedModelName schmiert mein Programm ab. Weiß jemand wie ich das abfangen kann?? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)

 Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 05. Dez. 2001 12:07 <-- editieren / zitieren --> Unities abgeben:          Nur für katy
Hi katy, was bedeutet "Abschmieren"? Stürtzt ganz SolidWorks ab, oder bekommst du eine explizite Fehlermeldung wie "Objekt unterstützt ... nicht"? Im zweiten Fall hast du die falsche Objektreferenz. In deinem Befehl steht auch was von part.GetReferencedModelName , das referenzierte Dokument erhälst du aber von einem View! Ein Beispiel was bei mir funktioniert:
Code:
Dim swApp As Object Dim DrawingDoc as Object Dim View as Object Dim ViewName as String Dim ViewCount as Long Dim meldung as Stringdim ref as string Sub main() Set swApp = CreateObject ("SldWorks.Application") ' an aktives Dokument anklinken, ggf. prüfen ob es auch eine ' Zeichnung ist, sonst abbrechen Set DrawingDoc = swApp.ActiveDoc ' der erste View ist immer das Blatt selbst Set View = DrawingDoc.GetFirstView While Not View Is Nothing ' Namen des aktuellen Views merken ref = View.GetReferencedModelName if ref = "" then ViewName = View.Name & ": keine Referenz" else ViewName = View.Name & "-> " & ref endif meldung = meldung & chr$(13) & chr$(10) & ViewName ' nächster View aufrufen Set View = View.GetNextView Wend Call Msgbox(meldung) End Sub
Ich hoffe das hilft dir weiter, sonst poste doch mal deinen Code. Stefan ------------------ Inoffizielle Solidworks Hilfeseite http://solidworks.cad.de EMail: Stefan.Berlitz@solidworks.cad.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Armin B Mitglied Software Engineer ERP/PLM/CAD
 
 Beiträge: 209 Registriert: 04.09.2000 Sw 2015 SP3
|
erstellt am: 05. Dez. 2001 14:55 <-- editieren / zitieren --> Unities abgeben:          Nur für katy
Hallo, genau so isses! Grundsätzlich sollte man in VBA schon sicher sein, dass das Objekt, das man verwendet auch die jeweilige Methode anbietet. Also View.GetReferencedModelName . Warum aber weiß das nicht schon der Kompiler (oder sogar der Editor)? Weil die meisten immer nur "Objekt" in der Typdeklaration verwenden! Besser geht es durch Einbinden der SolidWorks-Typbibliothek im VBA-Projekt: Menü Extras/Verweise, dort "SldWorks Typbibliothek" auswählen. Dann kann man auch sowas schreiben:
Code:
Dim Part As PartDoc
Un nochwas hilft bei der Fehlersuche:
Code:
On Error Goto ErrorLabel ... ErrorLabel: MsgBox Err.Description, vbOKOnly Err.Clear
Bis denne Armin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
katy Mitglied
 Beiträge: 4 Registriert: 05.12.2001
|
erstellt am: 06. Dez. 2001 09:35 <-- editieren / zitieren --> Unities abgeben:         
Danke, für die schnelle Hilfe. Also hier ein Teil meines Codes: Set swapp = CreateObject("sldworks.application") swapp.Visible = True Set part = swapp.activedoc If part Is Nothing Then Call MsgBox("keine Datei geöffnet", vbOKOnly + vbInformation, "Information") Exit Sub End If Set part = part.GetFirstView Set part = part.GetNextView referenz = part.GetReferencedModelName swapp.loadfile2 referenz, "" Ich hole also den Namen aus einer View. Bis zur Abfrage ob referenz eine leere Zeichenfolge ist, komm ich gar nicht. Bei dem Befehl GetReferencedModelName kommt dann die Fehlermeldung (Was du schon geahnt hast). Mit der On Error Methode kann ich es abfangen, die andere Version wäre mir aber lieber. Ich bin absoluter Neuling, daher kann ich das ganze nicht so gut erklären.... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Armin B Mitglied Software Engineer ERP/PLM/CAD
 
 Beiträge: 209 Registriert: 04.09.2000 Sw 2015 SP3
|
erstellt am: 06. Dez. 2001 10:46 <-- editieren / zitieren --> Unities abgeben:          Nur für katy
Hallo Katy, dürfen wir denn endlich mal erfahren, wie die Fehlermeldung lautet? Außerdem fehlen in Deinem Code die Deklarationen, oder machst Du das alles ohne? Tip: Erste Zeile in jedem Basic-Modul sollte sein:
Code:
Option explicit
Dann kann man auch keine Deklarationen vergessen. Gruß, Armin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
katy Mitglied
 Beiträge: 4 Registriert: 05.12.2001
|
erstellt am: 06. Dez. 2001 10:58 <-- editieren / zitieren --> Unities abgeben:         
Hier meine fehlenden Deklarationen Dim swapp As Object Dim part As Object Dim view As Object Dim longstatus As Long Dim referenz As String Meine Deklarationen habe ich nicht vergessen (Ein ganz so blutiger Anfänger bin ich auch nicht :-)) Die Fehlermeldung lautet: "Objekt unterstütz diese Methode nicht" Ich hoffe, dass ich jetzt alles habe. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
u.clemens Mitglied Konstrukteur
  
 Beiträge: 964 Registriert: 04.07.2000 engineer's law o cheap o fast o good check only two !
|
erstellt am: 06. Dez. 2001 13:35 <-- editieren / zitieren --> Unities abgeben:          Nur für katy
hallo katy, also ich habe mal Deine Code-Schnipsel einfach ge-cut-pastet und in ein Makro bei mir gesteckt - nur Deine Schnipsel, ohne irgendwelche Ergänzungen. Bei mir läuft das Makro glatt durch ohne Abzuschmieren oder Hängenzubleiben.  Allerdings könnte noch folgendes sein: Du gehst mit GetFirstView rein - o.k. und wie Du richtig erkannt haben scheinst, bist Du damit aber erst auf dem Blatt, um die erste Zeichenansicht zu treffen, nimmst Du richtig GetNextView - o.k. Nun müßte - und macht es bei mir auch - GetReferencedModelName den Namen des referenzierten Models bringen. Allerdings nur, wenn mit der Ansicht auch ein Model verknüpft ist! Kann es sein, daß Deine erste Zeichenansicht eine leere Ansicht (ohne refernziertes Model) ist ? Ansonsten ist mir noch folgendes aufgefallen: Dein Code ist schwer lesbar, denn Deine Variable part ist eigentlich zuerst ein DrawingDoc und später dann ein View. Funktioniert zwar, und ist auch nicht richtig falsch - aber eben schwer lesbar und unübersichtlich. Das nur so als Tip. Übersichtlicher wäre die Variablen etwas aussagekräftiger zu benennen - wie bei Stefan - , aber das ist Deine Sache, i.d.R. mußt Du damit zurecht kommen. Aber auch noch folgendes: Du verwendest LoadFile2 und willst offensichtlich damit das referenzierte Model aus der Zeichnung laden bzw. öffnen. Das wird wohl so nicht gehen! Meine API-Hilfe sagt zu LoadFile2: This method will load a foreign file (ie - *.igs, *.dxf, etc.). Diese Methode dient offensichtlich zum importieren von Dateien in IGES-, DXF- u.s.w. Format. Du hast aber mit GetReferencedModelName den Verweis auf ein SWX-Model (Teil oder Baugruppe). Um so ein Model zu öffnen gibts andere Methoden. Schau mal unter http://www.cad.de/foren/ubb/Forum2/HTML/000959.shtml da hatten wir gerade vor kurzem ein Thema, wo es auch um das Öffnen von referenzierten Modellen aus der Zeichnung heraus ging.
------------------ mfg uc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
u.clemens Mitglied Konstrukteur
  
 Beiträge: 964 Registriert: 04.07.2000 engineer's law o cheap o fast o good check only two !
|
erstellt am: 06. Dez. 2001 14:06 <-- editieren / zitieren --> Unities abgeben:          Nur für katy
hallo, ich noch mal habe gerade katy's info's gelesen, da ist mir noch was aufgefallen: Bis zur Abfrage ob referenz eine leere Zeichenfolge ist, komm ich gar nicht ja wo ist denn die Abfrage ? In den Code-Schnipseln kann ich nichts derartiges entdecken ! Habe ich also noch was probiert. Zeichnung mit einer leeren Ansicht(ohne ref. Model) als 1.Zeichenansicht. GetReferencedModelName erzeugt dann einen Leerstring - also vergeßt, was ich vorhin gerade geschrieben habe! Nun habe ich diese erste Ansicht auch noch gelöscht - also ein leeres Blatt ohne eine einzige Zeichenansicht. katy's Makro gestartet und siehe da, es schmiert tatsächlich ab und was soll man sagen sogar genau bei referenz = part.GetReferencedModelName und welch ein Wunder sogar mit der Fehlermeldung "Laufzeitfehler 91 - Objektvariable oder With-Blockvariable nicht festgelegt". Das ist aber auch logisch ! Wenn es keine erste Ansicht gibt, scheitert Set part = part.GetNextView part ist in diesem Augenblick dann mit "nothing" belegt, man könnte auch sagen undefiniert - auf jeden Fall kein View-Objekt. Wenn nun als nächstes referenz = part.GetReferencedModelName aufgerufen wird, sollte part aber ein View-Objekt sein - ist es aber eben nicht. Das muß scheitern ! Wer kann aber auch ahnen, daß katy eine Zeichnung ohne jede Ansicht hat. Ist es daß, was uns katy mit Nun kann es aber sein, dass mal eine Datei offen ist, die keine dazugehörige Datei hat sagen wollte? Darüber kann man nur orakeln. Wenn dem so ist, kann man das ja leicht abfangen. Einfach If part = nothing then ... einfügen. Das gleiche auch, wenn eine Zeichenansicht ohne referenziertes Model abgefangen werden soll: If referenz = "" then ...
------------------ mfg uc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Armin B Mitglied Software Engineer ERP/PLM/CAD
 
 Beiträge: 209 Registriert: 04.09.2000 Sw 2015 SP3
|
erstellt am: 06. Dez. 2001 15:43 <-- editieren / zitieren --> Unities abgeben:          Nur für katy
|
katy Mitglied
 Beiträge: 4 Registriert: 05.12.2001
|
erstellt am: 12. Dez. 2001 09:21 <-- editieren / zitieren --> Unities abgeben:         
|
Beere Mitglied Dipl.-Ing. Maschinenbau
   
 Beiträge: 1437 Registriert: 31.07.2001 Pro/E 2001 Wildfire 2 SWX 2013 HP Z400; 4GB
|
erstellt am: 12. Dez. 2001 10:11 <-- editieren / zitieren --> Unities abgeben:          Nur für katy
|