Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API:GetReferencedModelName

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 SOLIDWORKS
  
SOLIDWORKS Composer, ein Seminar am 17.12.2025
Autor Thema:  API:GetReferencedModelName (2019 mal gelesen)
katy
Mitglied


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

Beiträge: 4
Registriert: 05.12.2001

erstellt am: 05. Dez. 2001 11:17    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 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)



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

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 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 katy 10 Unities + Antwort hilfreich

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 String

dim 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


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

Beiträge: 209
Registriert: 04.09.2000

Sw 2015 SP3

erstellt am: 05. Dez. 2001 14:55    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 katy 10 Unities + Antwort hilfreich

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


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

Beiträge: 4
Registriert: 05.12.2001

erstellt am: 06. Dez. 2001 09:35    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

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


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

Beiträge: 209
Registriert: 04.09.2000

Sw 2015 SP3

erstellt am: 06. Dez. 2001 10:46    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 katy 10 Unities + Antwort hilfreich

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


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

Beiträge: 4
Registriert: 05.12.2001

erstellt am: 06. Dez. 2001 10:58    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

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


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

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 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 katy 10 Unities + Antwort hilfreich

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


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

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 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 katy 10 Unities + Antwort hilfreich

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


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

Beiträge: 209
Registriert: 04.09.2000

Sw 2015 SP3

erstellt am: 06. Dez. 2001 15:43    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 katy 10 Unities + Antwort hilfreich

Hallo uc,

das hast Du aber schön erklärt und ist mir deshalb einen Zehner wert 

Gruß, Armin

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

katy
Mitglied


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

Beiträge: 4
Registriert: 05.12.2001

erstellt am: 12. Dez. 2001 09:21    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

....und Männer verstehen Frauen doch....
Danke dass, ihr mir helfen konntet, ich habe jetzt die abfrage drin,  ob part nothing ist...und schaue da es funktioniert
DANKE

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

Beere
Mitglied
Dipl.-Ing. Maschinenbau


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

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 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 katy 10 Unities + Antwort hilfreich

Hi katy...

Zitat:

....und Männer verstehen Frauen doch....

von VBA versteh ich nix...aber der war 10x lieb...... 

Gruß
Andreas

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