Hoi allemaal
Ik werk momenteel aan een VBA-macro in SolidWorks 2017 om een onderdeel in STEP-formaat te exporteren en automatisch te openen met Bamboo Studio. Ondanks mijn inspanningen werkt de macro echter niet zoals verwacht en heb ik problemen met de STEP-opnamefunctie.
Hier is de huidige versie van mijn macro:
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
Ik heb al verschillende benaderingen geprobeerd, waaronder het gebruik van verschillende methoden om op te slaan in STEP-formaat, maar zonder succes. Ik krijg steeds de foutmelding "Fout bij het opslaan van het onderdeel in STEP-indeling."
Als iemand ervaring heeft met SolidWorks-macro's of ideeën heeft over hoe dit probleem kan worden opgelost, zou ik zeer dankbaar zijn voor alle hulp.
PS: ik heb alleen wat basiscode, en de code is gegenereerd met behulp van ChatGPT.
Bij voorbaat dank!
Vriendelijke groeten
Hallo
Het probleem zit in het opnamepad van het stapbestand. De onderstaande regel kan niet werken omdat deze niet naar een pad wijst.
stepFileName = "mon chemin \Exporte.step"
Moet vervangen door een C:....
Als de bestanden dan moeten worden opgeslagen in de pas met de bestandsnaam open of eigenschappen ervan, heb je een code nodig die iets "complexer" is dan die van Chat GPT
2 likes
Hallo Cyril,
Dank u voor uw antwoord.
In mijn code heb ik het juiste pad gezet dat ik hier om vertrouwelijkheidsredenen in de post heb veranderd.
Re
Probeer deze regel te wijzigen:
docExt.SaveAs stepFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, 0, 0
1 like
Hallo
Gelukkig nieuwjaar voor jou. Ik heb gezocht naar hoe ik de fout "Fout bij het opnemen van het onderdeel in STEP-formaat" kan oplossen, en dit is wat ik heb gevonden... Om te testen, en zoals altijd, zonder garantie dat het zal werken, maar toch testen 
-
STEP-bestandsgegevens controleren: Deze fout kan worden veroorzaakt door problematische gegevens in het STEP-bestand. U kunt proberen de optie "3D Interconnect" uit te schakelen in de SolidWorks-systeemopties om dit probleem te omzeilen
Hier is een link in het Engels om u te helpen: Ongeldige registratie-indexfout bij het importeren van STEP in SOLIDWORKS
-
Zorg er bij het exporteren naar STEP-formaat voor dat de exportopties correct zijn ingesteld. Dit kunnen instellingen zijn zoals uitvoer als volume-/polygoongeometrie of het exporteren van schetsentiteiten
STAP Exportopties - 2022 - SOLIDWORKS Help
-
Als het probleem zich blijft voordoen, kunt u de VBA-foutopsporingstools gebruiken om het gedrag van de macro te onderzoeken. Dit kan u helpen de bron van de fout te achterhalen en de nodige correcties aan te brengen.
VBA Debugger - De CAD-codeur
Aan de andere kant kunt u het ook proberen met de volgende oplossingen:
-
Controleer eerst of u over de benodigde machtigingen beschikt om bestanden in de opgegeven map op te slaan. Soms kunnen beveiligingsbeperkingen voorkomen dat bestanden worden opgeslagen.
-
ChatGPT gebruikt On Error Resume Next in je SaveAsSTEP-functie, wat betekent dat als er een fout optreedt, de code de volgende regel blijft uitvoeren. Dit kan het moeilijk maken om te bepalen waar de fout precies optreedt. U kunt overwegen om On Error GoTo te gebruiken om de uitvoeringsstroom naar een specifiek label te leiden in het geval van een fout, waar u gedetailleerde informatie over de fout kunt bekijken.
-
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é.
Hier is een voorbeeld van hoe u uw SaveAsSTEP-functie kunt wijzigen om enkele van deze suggesties op te nemen:
Functie SaveAsSTEP(ByVal partDoc als SldWorks.partDoc, ByVal stepFileName als string) als Booleaanse
Bij fout GoTo ErrorHandler
Dim docExt As SldWorks.ModelDocExtension
Set docExt = partDoc.Extension
SaveAsSTEP = docExt.SaveAs(stepFileName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, leeg, leeg, leeg, leeg)
Exit-functie
FoutAfhandelaar:
MsgBox "Fout bij het opnemen van het onderdeel in STEP-formaat. Foutdetails: " & Err.Description, vbExclamation
SaveAsSTEP = Onwaar
Functie beëindigen
In de hoop je verder te hebben geholpen
Met vriendelijke groet
Re
Bedankt voor je antwoorden, er is beter!
Wanneer ik de macro start, krijg ik dankzij de @Cyril_f code geen foutmelding meer en maakt hij een STEP-bestand op de juiste plaats, maar opent het niet.
Ik heb geen bambu studio, dus ik kan niet helpen. Laten we eens kijken of het niet het Shell-commando is dat het probleem is.
Probeer het zonder een kamer te openen om te zien of BombuStudio om te beginnen opent of niet.
Ter info, in je code schrijf je bamboe en de software heet bambuStudio (internet) voor de variabelen is het niet erg, maar in het bestandspad kan het problematisch zijn.
Hartelijk dank voor uw feedback.
Het werkt wel. Ik had een klein foutje gemaakt in het pad van de software.
bambooStudioPath = "C:\Program Files\Bambu Studio.exe"
In plaats van:
bambooStudioPath = "C:\Program Files\Bambu Studio\bambu-studio.exe"
Bedankt allemaal!
1 like
Ik zal de definitieve code met je delen als er geïnteresseerden zijn:
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 like
Goedenavond
Ik had de opmerking niet gemaakt, maar ik had er mijn twijfels over.