MAKRO, które działa zbyt szybko

Witam

Zrobiłem makro, które pozwala nam na eksport do PDF3D i STEP
Aby zarządzać oczyszczalnią ścieków, musimy przejść przez CZĘŚĆ na zewnątrz.

Czasami CZĘŚĆ nie otwiera się, KROK jest generowany z aktywnym dokumentem, a więc złożenie, jeśli część nie jest otwarta.
Jeśli zrestartuję makro po raz drugi  (czasami potrzebuję +), CZĘŚĆ się otworzy i wszystko pójdzie tak, jak powinno.

Czy może to wynikać z szybkości wykonania makra?
Czy możemy sprawdzić, czy PART jest otwarty przed zapisaniem w WWTP?
A może dodać czas oczekiwania?

Miłego dnia

Możesz pobrać nazwę pokoju wcześniej, aby upewnić się, że pokój jest otwarty, a jeśli nazwa nie pasuje do Twojej prośby, wróć do niej, aby ponownie poprosić o nazwę i dopóki nie jest dobra, nie eksportujesz.

Opublikuj pełny kod, który będzie łatwiejszy do zobaczenia.

Może to być również metoda na otwarcie pokoju, która nie jest właściwa.

Nie mogę dołączyć...
Check Point Infinity Następny komunikat blokujący

I okno, w którym pojawia się ten komunikat:
Wystąpił błąd HTTP 0. <br />/filefield/ahah/answer/field_attachement/0

REDAGOWAĆ:
W końcu jest dobrze... Z trudem włożyłem piżamę


macro.txt

FYI, aby umieścić kod, masz ikonę tutaj:

A w języku umieszczasz VBscript

1 polubienie

Witaj @SebJo,

Czy problem może być związany z nieporozumieniem dotyczącym ścieżki do zapisywania plików?
Wartość zmiennej DestinationFolderName nie jest używana podczas tworzenia kopii zapasowych plików. Katalog domyślny jest katalogiem docelowym.

W moim pierwszym teście plik Essai.SLDASM_1.SLDPRT został zapisany w podkatalogu instalacyjnym oprogramowania, a nie w folderze szablonu podstawowego. Co dziwne, działa dobrze, jeśli ponownie uruchomisz makro.

Po prostu połącz ścieżkę i nazwę pliku w trzech kopiach zapasowych: NazwaFolderu Docelowego i NazwaPliku*** na końcu makra.

Pozdrowienia

2 polubienia

 

Właśnie spojrzałem i ten sam błąd co @m.blt  wiersz do utworzenia DestinationFolderName jest zbyt niski i wartość jest wymagana przed przypisaniem zmiennej.

Ponadto nazwa pliku podczas eksportowania zawiera już rozszerzenie, więc eksportujesz coś takiego:

A.sldprt i dlatego nagrywanie nie działa:

Kod został poprawiony w nadziei, że Twój błąd pochodzi stamtąd:

' ******************************************************************************
' 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 polubienie

Ścieżka rekordu to folder bieżącego dokumentu
A nie katalog domyślny, chyba że się mylę

__

Jest to zaskakujące, ponieważ w domu swModel.GetTitle nie otrzymuje rozszerzenia
Tak więc dla CZĘŚCI makro daje to

 

Domyślam się, że to dlatego, że rozszerzenie pliku jest ukryte w systemie Windows, co nie jest w moim przypadku.

Jeśli chodzi o ścieżkę folderu, przeszedłem kilka wierszy w górę (patrz kod i komentarz powyżej), w przeciwnym razie

NazwaFolderuDocelowego = ŚcieżkaPliku

zostały znalezione poniżej: z:
FileNamePDF = NazwaFolderuDocelowego & Oznaczenie PropDesignation & "_" & PropCLUE & ".PDF"
oraz z:
FileNamePART = NazwaFolderuDocelowego & (Left(swModel.GetTitle, Len(swModel.GetTitle) - 7)) & "_" & PropHINT & Ext_PART

Tak więc przy pierwszym uruchomieniu makra ścieżka to = "" lub nic.

Z drugiej strony, każde kolejne uruchomienie pobiera wartość, którą dostaje w następnej linii.

Po prostu zamknij oprogramowanie i uruchom ponownie makro krok po kroku i spójrz na wartości swojej zmiennej w oknie, a zobaczysz problem.

Dziękuję za pomoc!
Wydaje się, że wszystko idzie dobrze