Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Makro asm2prt

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
  
PLM TechnologieForum Essen
Autor Thema:  Makro asm2prt (494 mal gelesen)
gearloose7
Mitglied
Techniker


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

Beiträge: 95
Registriert: 26.08.2010

Windows 10 x64 Pro for Workstations
3,1GHz 32GB
NVidia Quadro P5200
SWX2021 SP5.1
Office 365 Pro
Draftsight 2021

erstellt am: 02. Feb. 2023 16:08    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 weltbestes Forum,

Ich habe wieder einmal ein Problem mit meiner Unwissenheit in VBA.
Ich habe mir ein Makro gebastelt, mit dem ich eine Baugruppe per Knopfdruck als Part in einem Unterordner mit dem gleichen Namen wie die Baugruppe + aktuellem Datum abspeichere. So weit so gut.
Jetzt wollte ich den Code erweitern, um auch den jeweiligen Konfigurationsnamen zwischen Baugruppennamen und Datum stehen zu haben.
Ich habe den untenstehenden Code um die in Fett dargestellten Zeilen erweitert (vielen Dank an Thomas Weith für sein Makro Exportas das hier als Grundlage herhalten mußte...).
Das Makro hat dann auch einmal funktioniert  . Bei jedem weiteren Start hab ich einen Fehler in der Zeile "Set Conf = Part.GetActiveConfiguration"  .
Keine Ahnung warum das so ist und kann mir da jemand helfen?

lg
gearloose

Code:
Option Explicit

Dim swApp              As SldWorks.SldWorks
Dim swDocument          As SldWorks.ModelDoc2

Dim Part                As Object  'gyro
Dim Conf                As Object  'für Erweiterung Konfigurationsnamen

Dim bRet                As Boolean

Dim strDateiname        As String
Dim strNEWDateiname    As String
Dim strDateinameLang    As String
Dim strPfad            As String
Dim strNEWPfad          As String
Dim subfolder          As String

Dim strExtension        As String
Dim PartXtension        As String

Dim strMsgtxt          As String  ' nur wenn TestMessagebox eingeschaltet ist notwendig
Dim ZeitAlsDateiname    As String
Dim Zeit1              As String
Dim Tag                As String
Dim Monat              As String
Dim Jahr                As String

Dim StartConfigName    As String  'für Erweiterung Konfigurationsnamen
Dim ConfName            As String  'für Erweiterung Konfigurationsnamen

Dim i                  As Long

Dim intReturn          As Integer


Sub main()

' Namen des Unterordners festlegen und Extension
subfolder = "05_asm2prt\"

' Zeit holen und von Sonder- und Leerzeichen befreien...
Zeit1 = Now
ZeitAlsDateiname = Zeit1
ZeitAlsDateiname = Left(ZeitAlsDateiname, 10)
Tag = Left(ZeitAlsDateiname, 2)
Monat = Left(ZeitAlsDateiname, 5)
Monat = Right(Monat, 2)
Jahr = Right(ZeitAlsDateiname, 4)
ZeitAlsDateiname = Jahr & "-" + Monat & "-" + Tag
If Left(ZeitAlsDateiname, 1) = " " Then ZeitAlsDateiname = Right(ZeitAlsDateiname, Len(ZeitAlsDateiname) - 3)

' Anbindung an SWX
Set swApp = Application.SldWorks
Set swDocument = swApp.ActiveDoc

' Abbrechen, wenn gar kein SolidWorks-Dokument geöffnet
If swDocument Is Nothing Then End

' Dateinamen inkl. Pfad holen
strDateinameLang = swDocument.GetPathName      ' Dateinmae inkl. Pfad holen
If strDateinameLang = "" Then                  ' prüfen ob gespeichert oder nicht (leer)
    MsgBox ("Datei muß zuerst gespeichert werden!")
    End
End If
 
' Zerlegen in Pfad und Dateiname ohne Extension (7 Zeichen)
For i = Len(strDateinameLang) To 1 Step -1
    If Mid(strDateinameLang, i, 1) = "\" Then
        strPfad = Left(strDateinameLang, i)
        strDateiname = Mid(strDateinameLang, i + 1, Len(strDateinameLang) - i - 7)
        Exit For
    End If
Next i
   
' Pfad zum Unterverzeichnis zusammensetzen
strNEWPfad = strPfad + subfolder

' Prüfung, ob das Verzeichnisse existiert, da es sonst angelegt
' werden muss
If Len(Dir(strNEWPfad, vbDirectory)) = 0 Then
    MkDir (strNEWPfad)
End If

PartXtension = ".SLDPRT"
' bRet = swApp.SetUserPreferenceIntegerValue(swStepAP, 214)

Set Conf = Part.GetActiveConfiguration          ' Aktive Konfig auslesen_02-02-2023
StartConfigName = Conf.Name                    ' Aktive Konfig merken_02-02-2023

' neuen Pfad mit Dateinamen und richtiger Extesion zusammensetzen
strNEWDateiname = strNEWPfad & strDateiname & "_#" & StartConfigName & "_#" & ZeitAlsDateiname & PartXtension

' Speicherfunktion
Set Part = swApp.ActiveDoc
Part.SaveAs3 strNEWDateiname, 0, 0

MsgBox ("erfolgreich gespeichert: " & strNEWDateiname)

   
End Sub


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

Torsten Niemeier
Ehrenmitglied V.I.P. h.c.
Maschinenbau Ingenieur



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

Beiträge: 3682
Registriert: 21.06.2001

"ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform
** CSWP 04/2011 **
** CSWE 08/2011 **

erstellt am: 02. Feb. 2023 16: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 Nur für gearloose7 10 Unities + Antwort hilfreich

Zu dem Zeitpunkt, an dem Du per:

Set Conf = Part.GetActiveConfiguration

zuweisen möchtest hast Du "Part" ja noch garnicht zugewiesen.
Das machst Du erst ein paar Zeilen später mit:

Set Part = swApp.ActiveDoc

Also schieb Deine zwei fetten Zeilen dahinter, und auch den Zusammenbau des Pfades.

Ich bin nicht ganz firm darin, zu beurteilen, wie die Konfiguration des Parts dann eigentlich heißt, aber willst Du nicht eigentlich die Konfiguration der Baugruppe ermitteln?

[Diese Nachricht wurde von Torsten Niemeier am 02. Feb. 2023 editiert.]

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

Christoph Weise
Mitglied
Technischer Produktdesigner / Konstruktion / CAD-Admin


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

Beiträge: 204
Registriert: 22.03.2015

Dell 3650
Intel I7 11700k
32 GB RAM
Nvidia RTX A4000 16GB
Win 10 22H2 64-bit
SolidWorks 2022SP5
QuickPress 6.3.3
PortaX 2.27
SAP ERP 6.0

erstellt am: 02. Feb. 2023 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 Nur für gearloose7 10 Unities + Antwort hilfreich

Hallo gearloose,

Der Fehler ist relativ einfach:
Du rufst Part.GetActiveConfiguration auf, allerdings wird "Part" erst später im Code definiert.
Somit funktioniert der Aufruf nicht.

Das Makro hatte wahrscheinlich noch einmal funktioniert weil die Variable "Part" noch von einem Vohrigem aufrufen definiert war.

Gruß Christoph

------------------
Wer einen Fehler findet darf ihn behalten,
wer zwei findet kann beide behalten,
ab fünf Fehler gibs Rabatt :-)

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

Torsten Niemeier
Ehrenmitglied V.I.P. h.c.
Maschinenbau Ingenieur



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

Beiträge: 3682
Registriert: 21.06.2001

"ZUSE I.36", 8 BIT, 32 Lämpchen, Service-Ölkännchen "ESSO-Super", Software: AO auf Kuhlmann-Parallelogramm-Plattform
** CSWP 04/2011 **
** CSWE 08/2011 **

erstellt am: 02. Feb. 2023 16: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 Nur für gearloose7 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Torsten Niemeier:

Ich bin nicht ganz firm darin, zu beurteilen, wie die Konfiguration des Parts dann eigentlich heißt, aber willst Du nicht eigentlich die Konfiguration der Baugruppe ermitteln?

Sorry mein Fehler, denn "Part" ist in dem Moment die Baugruppe.
Ziemlich wilde (und auch überflüssige) Variablenbenennungen, oder?

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

gearloose7
Mitglied
Techniker


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

Beiträge: 95
Registriert: 26.08.2010

Windows 10 x64 Pro for Workstations
3,1GHz 32GB
NVidia Quadro P5200
SWX2021 SP5.1
Office 365 Pro
Draftsight 2021

erstellt am: 02. Feb. 2023 16: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 an alle,


Vielen Dank erstmal. Werde ich gleich probieren mit dem verschieben nach set part .....
Wie gesagt, bin von der Sorte try and error, aber aufgeben war noch nie mein Ding .... 

und wegen der wilden Variablenbenennung .... ist durchaus möglich, wenn man sich da aber nicht auskennt schaut das ganz harmlos aus ..

Danke nochmal an alle. 
gyro

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3189
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 03. Feb. 2023 09: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 gearloose7 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von gearloose7:
...
und wegen der wilden Variablenbenennung .... ist durchaus möglich, wenn man sich da aber nicht auskennt schaut das ganz harmlos aus ..
...

ich würd schon empfehlen die Benennung und die Typenzuweisung da eindeutig zu machen.
nachher probierst du eine Funktion in einem modeldoc2, die aber nur in einem assembly funktioniert ... und dann suchst du ... 

Object geht natürlich immer, aber
- man sieht nicht am Namen, was drin ist
- man bekommt nicht die möglichen Funktionen vorausgewählt beim code tippen ...

Gruß, Christian

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