Hoe kom je uit macro?

Hallo

In een macro waarmee u importbestanden kunt opslaan, hoe gaat het dan om als de gebruiker op de knop "Annuleren" klikt in het venster "Opslaan als"?

Macro Details:

Sub hoofd()

.....

        swApp.SetCurrentWorkingDirectory "D:\Studies\Commerce" 'pad'
        swApp.RunCommand SwCommands.swCommands_SaveAs, ""

Als de knop "Annuleren" door de gebruiker is geklikt, ga dan niet verder met de macro.

...

Einde sub

Alvast bedankt voor het advies en de antwoorden
 

Hallo 

Met de RunCommand API kunt u SW-opdrachten uitvoeren, maar u kunt geen feedback krijgen. het is alsof je handmatig op de knop klikt in SW

Waarom voert u niet zelf een dialoogvenster voor opslaan als uit en gebruikt u vervolgens de SaveAs Method API (IModelDocExtension) om uw bestand te exporteren.

A+

Philippe 

Bedankt voor het antwoord...

Ik mis VBA-vaardigheden om alles te begrijpen wat je me adviseert, maar ik zal het van dichterbij bekijken.

A+

Niet genoeg kennis in VBA, dus ik zie niet echt hoe ik dit dialoogvenster zelf moet starten, en als ik naar de SW API-help kijk, ben ik niet geavanceerder.

Ik zal iets meer moeten weten over de te volgen methode.

Bedankt.

Hallo

Plaats je code.

Hier is de code in een txt-bestand.


save_import.txt

Hallo

@ Prossignol :

Hoe moet het dialoogvenster worden gestart?

Als ik in de hulp van SW kijk, is er niet veel: http://help.solidworks.com/SearchEx.aspx?q=dialog+box+vba&sort=&version=2018&lang=English&prod=api&context=LANG%3den%26NRESULTS%3d25

Hallo

Zoals prossignol al zei, moet u de SaveAs Method API (IModelDocExtension) gebruiken om uw bestand te exporteren. Voor het dialoogvenster kunt u gewoon een msgBox maken met keuze en verwerken wat te doen op basis van de feedback van de gebruiker. Hier is een voorbeeld van wat u in uw macro kunt doen in de actie voor een kamer

ElseIf (swModel.GetType = swDocPART) Then
    swModel.SetTitle2 "$PRP:SW-File Name"
    Dim namePRT As String
    Dim chemin As String
    chemin = "D:\Etude\Commerce\"
    namePRT = chemin & swModel.GetTitle & ".sldprt"
    If MsgBox("Voulez-vous sauvegarder cette pièce ?", vbYesNo, "Enregistrement") = vbYes Then
        swModel.SaveAs namePRT
    End If
End If

U vindt op de link: https://www.excel-pratique.com/fr/vba/boites_de_dialogue.php meer informatie over de mogelijkheden van VBA-dialogen.

Vriendelijke groeten

1 like

Hallo

Bedankt voor deze antwoorden, maar ik wil het venster open houden met Windows Verkenner omdat er een boomstructuur in deze map "Commerce" is om de componenten op te slaan.

Sorry, maar op dit moment zie ik geen beter antwoord....

Vriendelijke groeten.

Hallo

In dit geval is het mogelijk om een verkenner te openen zonder het SW-dialoogvenster te gebruiken. Het is iets algemener en stelt je in staat om door de boom te navigeren.

Hallo

In dit geval neem ik het stukje code, want zelfs als het me zou lukken om een oplossing te vinden met msgbox, zou een generieke oplossing goed bij me passen....

Vriendelijke groeten.

Hallo

U kunt ook een BrowserForFolder gebruiken om de gebruiker in staat te stellen de doelmap te kiezen:

ElseIf (swModel.GetType = swDocPART) Then swModel.SetTitle2 "$PRP:SW-File Name"
    Dim namePRT As String
    Dim chemin As String
    chemin = "D:\Etude\Commerce\"
    If MsgBox("Voulez-vous sauvegarder cette pièce ?", vbYesNo, "Enregistrement") = vbYes Then
        Dim objShell   As Shell
        Dim ssfWINDOWS As Long
        Dim objFolder  As Folder
        Set objShell = New Shell
        Set objFolder = objShell.BrowseForFolder(0, "SelectDossiers", 0, chemin)
        If (Not objFolder Is Nothing) Then
            namePRT = objFolder & "\" & swModel.GetTitle & ".sldprt"
            swModel.SaveAs namePRT
        End If
    End If
End If

 

Wees voorzichtig, u moet "Microsoft Shell Controls And Automation" in de projectreferenties zetten.

Vriendelijke groeten

1 like