MAKRO, das zu schnell läuft

Hallo

Ich habe ein Makro erstellt, mit dem wir nach PDF3D und STEP exportieren können
Um die Kläranlage zu verwalten, müssen wir durch ein TEIL an der Außenseite gehen.

Manchmal öffnet sich das TEIL nicht, der SCHRITT wird mit dem aktiven Dokument generiert, also die Baugruppe, wenn das Teil nicht geöffnet ist.
Wenn ich das Makro ein zweites Mal neu starte (manchmal brauche ich +), öffnet sich das PART und alles läuft so, wie es soll.

Kann es von der Ausführungsgeschwindigkeit des Makros herrühren?
Können wir überprüfen, ob das TEIL geöffnet ist, bevor wir es in der Kläranlage speichern?
Oder eine Wartezeit hinzufügen?

Schönen Tag

Sie können den Namen des Raums vorher abrufen, um sicherzustellen, dass der Raum geöffnet ist, und wenn der Name nicht mit Ihrer Anfrage übereinstimmt, fragen Sie erneut nach dem Namen, und solange er nicht gültig ist, exportieren Sie nicht.

Posten Sie den vollständigen Code, damit er leichter zu sehen ist.

Es kann auch die Methode sein, Ihren Raum zu öffnen, die nicht die richtige ist.

Ich kann nicht anhängen...
Check Point Infinity Nächste Blockierungsmeldung

Und Fenster, in dem diese Meldung angezeigt wird:
Ein HTTP 0-Fehler ist aufgetreten. <br />/filefield/ahah/antwort/field_attachement/0

REDIGIEREN:
Endlich ist es gut... Ich hatte Mühe, den Pyjama zu setzen


macro.txt

Zu Ihrer Information, um den Code einzufügen, haben Sie das Symbol hier:

Und in der Sprache setzen Sie VBscript

1 „Gefällt mir“

Hallo @SebJo,

Könnte das Problem mit einem Missverständnis über den Pfad zum Speichern von Dateien zusammenhängen?
Der Wert der Variablen DestinationFolderName wird beim Sichern von Dateien nicht verwendet. Das Standardverzeichnis ist das Ziel.

In meinem ersten Test wurde die Datei Essai.SLDASM_1.SLDPRT in einem Unterverzeichnis der SW-Installation gespeichert und nicht im Basis-Vorlagenordner. Seltsamerweise funktioniert es gut, wenn Sie das Makro neu starten.

Verketten Sie einfach den Pfad und den Dateinamen in den drei Backups: DestinationFolderName & FileName*** am Ende des Makros.

Herzliche Grüße

2 „Gefällt mir“

 

Ich habe gerade nachgeschaut und derselbe Fehler wie @m.blt  , die Zeile zum Erstellen von DestinationFolderName ist zu niedrig und der Wert wird angefordert, bevor die Variable zugewiesen wird.

Darüber hinaus enthält der Dateiname beim Exportieren bereits eine Erweiterung, sodass Sie etwas wie folgt exportieren:

A.sldprt und die Aufzeichnung funktioniert daher nicht:

Der Code wurde korrigiert, in der Hoffnung, dass Ihr Fehler von dort kam:

' ******************************************************************************
' macro du 19/04/22 by sj
' ******************************************************************************

Sub main()

Dim swApp                   As SldWorks.SldWorks
Dim swModel                 As SldWorks.ModelDoc2
Dim swModelDocExt           As SldWorks.ModelDocExtension
Dim swCustProp              As CustomPropertyManager
Dim val                     As String
Dim valout                  As String
Dim bool                    As Boolean
Dim INDICE                  As Boolean
Dim swExportData            As SldWorks.ExportPdfData
Dim boolstatus              As Boolean
Dim filename                As String
Dim FileNamePDF             As String
Dim FileNamePART            As String
Dim FileNameSTEP            As String
Dim lErrors                 As Long
Dim lWarnings               As Long
Dim ActiveConfig            As String
Dim sModelFullPath          As String
Dim sFilePath               As String
Dim NomDossierDestination   As String
Dim Ext_PART                As String
Dim Ext_STEP                As String
Dim errors                  As Long
Dim warnings                As Long
Dim Nomfichier              As String
Dim TestStr                 As String

Ext_PART = ".SLDPRT"
Ext_STEP = ".STEP"

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
'Controle si un PART ou un ASM est ouvert
    If swModel Is Nothing Then
        MsgBox "Aucun assemblage ou pièce en cours", vbCritical
        End
    End If
    
    If swModel.GetType <> swDocASSEMBLY And swModel.GetType <> swDocPART Then
        MsgBox "Cette Macro ne fonctionne que sur les assemblages ou les pièces", vbCritical
        End
    End If
    Set swModelDocExt = swModel.Extension
    Set swExportData = swApp.GetExportFileData(1)
    
    swExportData.ExportAs3D = True
    
'Controle si le fichier ouvert a déjà été sauvegardé
    filename = swModel.GetPathName
    If filename = "" Then
        MsgBox "Sauvegarder d'abord le fichier et réessayez", vbCritical
        End
    End If

    ActiveConfig = swApp.GetActiveConfigurationName(filename)
    
' Recuperation de propriete (changer la valeur entre "" apres Get4 pour changer de propriete à  récupérer)
    Set swCustProp = swModelDocExt.CustomPropertyManager("")
    bool = swCustProp.Get4("DESIGNATION", False, val, valout)
    PropDESIGNATION = valout
    
'Controle si le fichier ouvert a déjà  été approuvé
   PropINDICE = InputBox("A quel indice souhaitez vous générer les fichiers ?")

   If PropINDICE = "" Then
       MsgBox "Merci de ne pas laisser le champs vide", vbCritical
       Exit Sub
    End If
        
                    
'Controle si le fichier ouvert a déjà  été smarté
    If PropDESIGNATION = "" Then
        MsgBox "SMARTER votre fichier avant d'exécuter la MACRO", vbCritical
        End
    End If

    sModelFullPath = swModel.GetPathName
    sFilePath = Left(sModelFullPath, InStrRev(sModelFullPath, "\"))

'variable remonté car déclaré en dessous la 1ère utilisation de la variable dans ta version
NomDossierDestination = sFilePath
 
    
'Vérifie que le fichier PDF n'existe pas à cet indice avant enregistrement
    FileNamePDF = NomDossierDestination & PropDESIGNATION & "_" & PropINDICE & ".PDF"
    TestStr = ""
    On Error Resume Next
    TestStr = Dir(FileNamePDF)
    On Error GoTo 0
    If TestStr = "" Then
    Else
        MsgBox "Le fichier PDF existe déjà  à  cet indice " & vbCrLf & "dans le dossier de l'assemblage : " & vbCrLf & vbCrLf & sFilePath, vbCritical
        Exit Sub
    End If
    
    
'Vérifie que le fichier PART n'existe pas à cet indice avant enregistrement
    FileNamePART = NomDossierDestination & (Left(swModel.GetTitle, Len(swModel.GetTitle) - 7)) & "_" & PropINDICE & Ext_PART
    TestStr = ""
    On Error Resume Next
    TestStr = Dir(FileNamePART)
    On Error GoTo 0
    If TestStr = "" Then
    Else
        MsgBox "Le fichier PART existe déjà à cet indice" & vbCrLf & "dans le dossier de l'assemblage : " & vbCrLf & vbCrLf & sFilePath, vbCritical
        Exit Sub
    End If
    
    
'Vérifie que le fichier STEP n'existe pas à cet indice avant enregistrement
    FileNameSTEP = NomDossierDestination & PropDESIGNATION & "_" & PropINDICE & Ext_STEP
    TestStr = ""
    On Error Resume Next
    TestStr = Dir(FileNameSTEP)
    On Error GoTo 0
    If TestStr = "" Then
    Else
        MsgBox "Le fichier STEP existe déjà  à  cet indice" & vbCrLf & "dans le dossier de l'assemblage : " & vbCrLf & vbCrLf & sFilePath, vbCritical
        Exit Sub
    End If
    
    
'Enregistrer le doc actif en PDF
    swModel.ForceRebuild3 True
    swModel.ShowNamedView2 "*Isometric", -1
    swModel.ViewZoomtofit2
    boolstatus = swModelDocExt.SaveAs(FileNamePDF, 0, 0, swExportData, lErrors, lWarnings)

'Enregistrer le doc actif en PART
    Set Part = swApp.ActiveDoc
    longstatus = Part.SaveAs3(FileNamePART, 0, 0)
    
'Ouvrir le doc précédent / Enregistrer le doc actif en STEP
    Set swPart = swApp.OpenDoc6(FileNamePART, 1, 0, "", errors, warnings)
    Set Part = swApp.ActiveDoc
    longstatus = Part.SaveAs3(FileNameSTEP, 0, 0)
           
'Message d'avertissement d'execution de la macro
    MsgBox "MACRO TERMINEE :" & vbCrLf & "Contrôler les fichiers PDF3D, PART, STEP", vbInformation

End Sub

 

1 „Gefällt mir“

Der Datensatzpfad ist der Ordner des aktuellen Dokuments
Und nicht das Standardverzeichnis , es sei denn, ich liege falsch

__

Es ist überraschend, da swModel.GetTitle zu Hause die Erweiterung nicht erhält
Für das PART ergibt das Makro also Folgendes:

 

Ich vermute, es liegt daran, dass die Dateierweiterung in Windows versteckt ist, was bei mir nicht der Fall ist.

Für den Pfad des Ordners bin ich ein paar Zeilen nach oben gegangen (siehe Code und Kommentar oben) sonst ist die

ZielordnerName = sDateiPfad

wurde unten gefunden: von:
FileNamePDF = DestinationFolderName & PropDesignation & "_" & PropCLUE & ".PDF"
und von:
FileNamePART = DestinationFolderName & (Left(swModel.GetTitle, Len(swModel.GetTitle) - 7)) & "_" & PropHINT & Ext_PART

Beim 1. Start des Makros ist der Pfad also = ein "" oder nichts.

Auf der anderen Seite nimmt es bei jedem nachfolgenden Start den Wert, den es in der nächsten Zeile erhält.

Schließen Sie einfach SW und starten Sie Ihr Makro Schritt für Schritt neu und schauen Sie sich die Werte Ihrer Variablen im Fenster an, und Sie werden das Problem sehen.

Danke für Ihre Hilfe!
Alles scheint gut zu laufen