Problem z makrem VBA do eksportowania i otwierania pliku STEP za pomocą Bamboo Studio

Cze wszystkim

Obecnie pracuję nad makrem VBA w SolidWorks 2017, aby wyeksportować część w formacie STEP i otworzyć ją automatycznie za pomocą Bamboo Studio. Jednak pomimo moich starań makro nie działa zgodnie z oczekiwaniami i mam trudności z funkcją nagrywania STEP.

Oto aktualna wersja mojego makra:

Sub ExportAndOpenWithBambooStudio()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim partDoc As SldWorks.partDoc
    Dim stepFileName As String
    Dim bambooStudioPath As String
    
    ' Chemin du fichier STEP exporté
    stepFileName = "mon chemin \Exporte.step"
    
    ' Chemin vers Bamboo Studio
    bambooStudioPath = "C:\Program Files\Bambu Studio.exe"
    
' Initialisation de l'application SolidWorks
    Set swApp = CreateObject("SldWorks.Application")
    
    ' Vérifier si SolidWorks est en cours d'exécution
    If swApp Is Nothing Then
        MsgBox "SolidWorks n'est pas en cours d'exécution. Veuillez démarrer SolidWorks et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Vérifier si un document est ouvert dans SolidWorks
    If swApp.ActiveDoc Is Nothing Then
        MsgBox "Aucun document n'est ouvert dans SolidWorks. Veuillez ouvrir un document et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Récupérer le modèle actif
    Set swModel = swApp.ActiveDoc
    
    ' Vérifier si le document est une pièce (part)
    If swModel.GetType <> swDocPART Then
        MsgBox "Le document actif n'est pas une pièce (part). Veuillez ouvrir une pièce et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Convertir le document en objet de pièce
    Set partDoc = swModel
    
    ' Exporter le modèle au format STEP
    If Not SaveAsSTEP(partDoc, stepFileName) Then
        MsgBox "Erreur lors de l'enregistrement de la pièce au format STEP.", vbExclamation
        Exit Sub
    End If
    
    ' Fermer le modèle sans enregistrer les modifications
    swModel.CloseDoc
    
    ' Ouvrir le fichier STEP avec Bamboo Studio
    OpenWithBambooStudio bambooStudioPath, stepFileName
End Sub

Function SaveAsSTEP(ByVal partDoc As SldWorks.partDoc, ByVal stepFileName As String) As Boolean
    On Error Resume Next
    Dim docExt As SldWorks.ModelDocExtension
    Set docExt = partDoc.Extension
    docExt.SaveAs stepFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Empty, Empty, Empty
    SaveAsSTEP = (Err.Number = 0)
    On Error GoTo 0
End Function

Sub OpenWithBambooStudio(ByVal bambooStudioPath As String, ByVal stepFileName As String)
    On Error Resume Next
    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run """" & bambooStudioPath & """ """ & stepFileName & """", vbNormalFocus
    Set objShell = Nothing
    On Error GoTo 0
End Sub

Próbowałem już kilku podejść, w tym różnych metod zapisywania w formacie STEP, ale bez powodzenia. Ciągle pojawia się komunikat o błędzie "Błąd podczas zapisywania części w formacie STEP".

Jeśli ktoś ma doświadczenie z makrami SolidWorks lub ma pomysły jak rozwiązać ten problem, byłbym bardzo wdzięczny za wszelką pomoc.

PS: Mam tylko podstawowy kod, a kod został wygenerowany za pomocą ChatGPT.

Z góry dzięki!

Pozdrowienia

Witam
Problem tkwi w ścieżce nagrywania pliku krokowego. Poniższa linia nie może działać, ponieważ nie wskazuje żadnej ścieżki.

stepFileName = "mon chemin \Exporte.step"

Należy zastąpić znakiem C:....
Jeśli pliki muszą być następnie zapisywane w kroku z otwartą nazwą pliku lub jego właściwościami, potrzebujesz kodu, który jest nieco bardziej "złożony" niż ten oferowany przez Chat GPT

2 polubienia

Witaj Cyrylu,

Dziękuję za odpowiedź.
W moim kodzie umieściłem właściwą ścieżkę, którą zmieniłem w poście tutaj ze względu na poufność.

Ponownie
Spróbuj zmienić ten wiersz:

    docExt.SaveAs stepFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, 0, 0

1 polubienie

Witam

Szczęśliwego Nowego Roku dla Ciebie. Szukałem, jak rozwiązać błąd "Błąd podczas nagrywania części w formacie STEP" i oto, co znalazłem... Testować i jak zawsze bez gwarancji, że to zadziała, ale i tak testować :blush:

  • Sprawdź dane pliku STEP: Ten błąd może być spowodowany problematycznymi danymi w pliku STEP. Aby obejść ten problem, można spróbować wyłączyć opcję "3D Interconnect" w opcjach systemu SolidWorks
    Oto link w języku angielskim, który może Ci pomóc: Błąd nieprawidłowego indeksu rejestracji podczas importowania STEP do SOLIDWORKS

  • Podczas eksportowania do formatu STEP upewnij się, że opcje eksportu są ustawione poprawnie. Może to obejmować takie ustawienia, jak dane wyjściowe jako geometria objętościowa/wielokątna lub eksport elementów szkicu
    Opcje eksportu STEP - 2022 - Pomoc SOLIDWORKS

  • Jeśli problem będzie się powtarzał, możesz użyć narzędzi debugowania VBA, aby sprawdzić zachowanie makra. Może to pomóc w zidentyfikowaniu źródła błędu i wprowadzeniu niezbędnych poprawek.
    Debugger VBA — koder CAD

Z drugiej strony możesz również wypróbować następujące rozwiązania:

  • Najpierw sprawdź, czy masz niezbędne uprawnienia do zapisywania plików w określonym katalogu. Czasami ograniczenia bezpieczeństwa mogą uniemożliwić zapisanie plików.

  • ChatGPT używa On Error Resume Next w funkcji SaveAsSTEP, co oznacza, że jeśli wystąpi błąd, kod kontynuuje wykonywanie następnego wiersza. Może to utrudnić dokładne określenie, gdzie występuje błąd. Możesz rozważyć użycie opcji W przypadku błędu GoTo, aby skierować przepływ wykonywania do określonej etykiety w przypadku błędu, gdzie można wyświetlić szczegółowe informacje o błędzie.

  • La méthode SaveAs renvoie un booléen indiquant si l’opération a réussi ou non. Vous pouvez utiliser cette valeur de retour pour déterminer si l’opération a réussi et afficher un message d’erreur approprié.
    

Oto przykład tego, jak można zmodyfikować funkcję SaveAsSTEP, aby uwzględnić niektóre z tych sugestii:
Funkcja SaveAsSTEP(ByVal partDoc As SldWorks.partDoc, ByVal stepFileName As String) Jako wartość logiczna
W przypadku błędu GoTo ErrorHandler
Dim docExt As SldWorks.ModelDocExtension
Ustaw docExt = partDoc.Extension
SaveAsSTEP = docExt.SaveAs(nazwa_pliku_kroku, swSaveAsCurrentVersion, swSaveAsOptions_Silent, pusty, pusty, pusty)
Funkcja wyjścia
Obsługa błędów:
MsgBox "Błąd podczas nagrywania części w formacie STEP. Szczegóły błędu: " & Err.Description, vbExclamation
SaveAsSTEP = Fałsz
Zakończ funkcję

Mam nadzieję, że pomogłem ci iść naprzód
Z poważaniem

Ponownie

Dziękuję za odpowiedzi, jest lepiej!

Po uruchomieniu makra nie pojawia się już komunikat o błędzie dzięki kodowi @Cyril_f , a on tworzy plik STEP we właściwym miejscu, ale go nie otwiera.

Nie mam bambu studio, więc nie mogę pomóc. Zobaczmy, czy to nie polecenie Shell jest problemem.

Wypróbuj go bez otwierania pokoju, aby sprawdzić, czy BombuStudio się otwiera, czy nie.
FYI, w swoim kodzie piszesz, a oprogramowanie nazywa się bambuStudio (internet) dla zmiennych nie jest to wielka sprawa, ale w ścieżce pliku może to być problematyczne.

Bardzo dziękujemy za Twoją opinię.

To działa. Popełniłem mały błąd na ścieżce oprogramowania.

bambooStudioPath = "C:\Program Files\Bambu Studio.exe"

Zamiast:
bambooStudioPath = "C:\Program Files\Bambu Studio\bambu-studio.exe"

Dziękuję Wam wszystkim!

1 polubienie

Udostępnię Ci ostateczny kod, jeśli będą jakieś zainteresowane:


Sub ExportAndOpenWithBambooStudio()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim partDoc As SldWorks.partDoc
    Dim stepFileName As String
    Dim bambooStudioPath As String
    
    ' Chemin du fichier STEP exporté
    stepFileName = "C:\**CHEMIN ICI**\Exporte.step"
    
    ' Chemin vers Bamboo Studio
    bambooStudioPath = "C:\Program Files\Bambu Studio\bambu-studio.exe"
    
' Initialisation de l'application SolidWorks
    Set swApp = CreateObject("SldWorks.Application")
    
    ' Vérifier si SolidWorks est en cours d'exécution
    If swApp Is Nothing Then
        MsgBox "SolidWorks n'est pas en cours d'exécution. Veuillez démarrer SolidWorks et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Vérifier si un document est ouvert dans SolidWorks
    If swApp.ActiveDoc Is Nothing Then
        MsgBox "Aucun document n'est ouvert dans SolidWorks. Veuillez ouvrir un document et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Récupérer le modèle actif
    Set swModel = swApp.ActiveDoc
    
    ' Vérifier si le document est une pièce (part)
    If swModel.GetType <> swDocPART Then
        MsgBox "Le document actif n'est pas une pièce (part). Veuillez ouvrir une pièce et réessayer.", vbExclamation
        Exit Sub
    End If
    
    ' Convertir le document en objet de pièce
    Set partDoc = swModel
    
    ' Exporter le modèle au format STEP
    If Not SaveAsSTEP(partDoc, stepFileName) Then
        MsgBox "Erreur lors de l'enregistrement de la pièce au format STEP.", vbExclamation
        Exit Sub
    End If
    
    ' Ouvrir le fichier STEP avec Bamboo Studio
    OpenWithBambooStudio bambooStudioPath, stepFileName
End Sub

Function SaveAsSTEP(ByVal partDoc As SldWorks.partDoc, ByVal stepFileName As String) As Boolean
    On Error Resume Next
    Dim docExt As SldWorks.ModelDocExtension
    Set docExt = partDoc.Extension
    docExt.SaveAs stepFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, 0, 0
    SaveAsSTEP = (Err.Number = 0)
    On Error GoTo 0
End Function

Sub OpenWithBambooStudio(ByVal bambooStudioPath As String, ByVal stepFileName As String)
    On Error Resume Next
    Dim objShell As Object
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run """" & bambooStudioPath & """ """ & stepFileName & """", vbNormalFocus
    Set objShell = Nothing
    On Error GoTo 0
End Sub
1 polubienie

Dobry wieczór
Nie powiedziałem tej uwagi, ale miałem co do tego wątpliwości.