• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Opslaan bevestigen in vba

Status
Niet open voor verdere reacties.

adile

Gebruiker
Lid geworden
2 mrt 2014
Berichten
202
goedenavond,

Ik wil de onderstaande code gebruiken om mijn bestand in een bepaalde map op te slaan onder een bepaalde naam, wanneer het excel bestand afsluit.
Code werkt hij slaat het bestand op onder de juiste naam en in de juiste map, maar ik wil een bevestigings pop-up hebben, zodat ik mocht ik hem toch in een andere map willen opslaan dat ook kan doen, of wanneer ik hem niet wil opslaan, dit ook aan kan geven.

is dit mogelijk? en zo ja wat moet ik toevoegen?


Code:
'Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error GoTo GetOut
ActiveWorkbook.SaveAs Filename:= _
"H:\ & "ER " & Cells(2, 8) & ".xlsm", FileFormat:= _
52, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
GetOut:
End Sub


Alvast bedankt!

Adile
 
Gebruik dan de SaveAs van Excel. Zit standaard ingebouwd...
 
klopt, had ik ook al aan gedacht ;)
Maar de map waar het bestand opgeslagen moet worden opgeslagen is lastig te vinden (H:\) heb ik als voorbeeld gebruikt.
vandaar mijn vraag.
 
Misschien heb je er nog iets aan.
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Select Case MsgBox("Automatisch opslaan?" & vbLf & vbLf & "Kies Ja voor opslaan" & vbLf & "Nee voor een ander naam kiezen" & vbLf & "Annuleren voor helemaal niet opslaan", vbYesNoCancel)
  Case vbYes
    ThisWorkbook.SaveAs "H:\ER " & Cells(2, 8) & ".xlsm", 52
  Case vbNo
    Application.Dialogs(xlDialogSaveAs).Show
 End Select
End Sub
 
Of via zoiets... (is nog niet 100% OK...)
Code:
Sub ff()

    Application.Dialogs(xlDialogSaveAs).Show "H:\" & ER & Cells(2, 8) & ".xlsm", 52
    

End Sub

[EDIT] nu ook het type bestand er bij ...
 
Laatst bewerkt:
Of met een functie:
Code:
Function GetFolder() As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Selecteer een map"
        .AllowMultiSelect = False
        .InitialFileName = ThisWorkbook.Path
        If .Show <> -1 Then GoTo GeenMap
        GetFolder = .SelectedItems(1)
        Exit Function
    End With
    
GeenMap:
    GetFolder = ""
End Function

De aanroep vanuit je eigen routine is dan:
Mapnaam = GetFolder
 
Jazerker HSV,

dank voor je reactie.

Dit is wat ik bedoel, alleen bij case no Wil ik dan dat hij automatisch (in dit geval) naar de H:\ map gaat en dat de nieuwe bestand naam naam ook al is ingevult in die balk.
Is dat ook nog te bewerkstelligen?

Adile
 
Ginger,

Ik heb jou regel toegevoegd aan:

Case vbNo
Application.Dialogs(xlDialogSaveAs).Show

Van de code van HSV, ik hoopte dat dat zou werken maar helaas.

Edmoor,

Ik weet niet precies hoe ik met jou code moet omgaan.
Ik neem aan dat ik hem achter het workbook plak en hem dan ergens in mijn code moet aanroepen.
waar zou ik hem in mijn code moeten aanroepen?

Adile
 
De naam naam begrijp ik niet helemaal, maar in dat vakje "Bestandsnaam" lukt het niet als je dat wil.
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Select Case MsgBox("Automatisch opslaan?" & vbLf & vbLf & "Kies Ja voor opslaan" & vbLf & "Nee voor een ander naam kiezen" & vbLf & "Annuleren voor helemaal niet opslaan", vbYesNoCancel)
  Case vbYes
    ThisWorkbook.SaveAs "H:\ER " & Cells(2, 8) & ".xlsm", 52
 Case vbNo
With Application.FileDialog(msoFileDialogSaveAs)
    .InitialFileName = "H:\"
    .FilterIndex = 2
    .Title = "Opslaan ?"
    .AllowMultiSelect = False
    .Show
    .Execute
    End With
 End Select
End Sub
 
Edmoor,

Ik weet niet precies hoe ik met jou code moet omgaan.
Ik neem aan dat ik hem achter het workbook plak en hem dan ergens in mijn code moet aanroepen.
waar zou ik hem in mijn code moeten aanroepen?

Zie HSV hierboven, zo mag het ook.
 
HSV,

Met jouw code ben ik er bijna, ik ben dus nu in de juiste map waarin ik hem wil opslaan.
Het komt dus voor dat ik het bestand in deze map wil opslaan maar de naam wil ik veranderen, in dat geval is de code goed.
het komt ook voor dat de naam van het bestand zoals ik hem had juist is, maar ik wil het bestand in een andere map opslaan.

dat is de reden dat ik de bestandsnaam al voorgedrukt wil hebben.

Ik probeer het op onderstaande wijze met jouw laatste code, maar ik krijg een foutmelding.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Select Case MsgBox("Automatisch opslaan?" & vbLf & vbLf & "Kies Ja voor opslaan" & vbLf & "Nee voor een ander naam kiezen" & vbLf & "Annuleren voor helemaal niet opslaan", vbYesNoCancel)
  Case vbYes
    ThisWorkbook.SaveAs "H:\ARCHIEF MELDKAMER\RE blanco en orginele formulieren\Excel files\Rapportages\" & "ER Report " & Cells(2, 8) & ".xlsm", 52
 Case vbNo
With Application.FileDialog(msoFileDialogSaveAs)
    .InitialFileName = "H:\ARCHIEF MELDKAMER\RE blanco en orginele formulieren\Excel files\Rapportages\" & "ER Report " & Cells(2, 8) & ".xlsm", 52
    .FilterIndex = 2
    .Title = "Opslaan ?"
    .AllowMultiSelect = False
    .Show
    .Execute
    End With
 End Select
End Sub
 
Lijkt het je dan niet handig om ook de betreffende melding erbij te zetten?
 
Zoals @edmoor al aangaf is het vermelden altijd op zijn plaats.
Maar ik weet toevallig waar je fout zit.
Code:
   .InitialFileName = "H:\ARCHIEF MELDKAMER\RE blanco en orginele formulieren\Excel files\Rapportages\"[COLOR=#ff0000] & "ER Report " & Cells(2, 8) & ".xlsm", 52[/COLOR]
 
Die ,52 mag er op dat punt niet achter.
 
Sorry edmoor,

Compileerfout

Verwacht:instructie-einde

de komma in het rode gedeelte wordt geselecteerd.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Select Case MsgBox("Automatisch opslaan?" & vbLf & vbLf & "Kies Ja voor opslaan" & vbLf & "Nee voor een ander naam kiezen" & vbLf & "Annuleren voor helemaal niet opslaan", vbYesNoCancel)
  Case vbYes
    ThisWorkbook.SaveAs "H:\ARCHIEF MELDKAMER\RE blanco en orginele formulieren\Excel files\Rapportages\" & "ER Report " & Cells(2, 8) & ".xlsm", 52
 Case vbNo
With Application.FileDialog(msoFileDialogSaveAs)
    .InitialFileName = "H:\ARCHIEF MELDKAMER\RE blanco en orginele formulieren\Excel files\Rapportages\" & "ER Report " & Cells(2, 8) & ".xlsm"[COLOR="#FF0000"], 52[/COLOR]
    .FilterIndex = 2
    .Title = "Opslaan ?"
    .AllowMultiSelect = False
    .Show
    .Execute
    End With
 End Select
End Sub
 
Zie #13 en #14
 
Ginger,

Ik heb jou regel toegevoegd aan:
Ik zou vooral gewoon alleen maar dit gebruiken...
Code:
Sub ff()

    Application.Dialogs(xlDialogSaveAs).Show "H:\ER" & Cells(2, 8) & ".xlsm", 52
    

End Sub
Waarbij ik nu die ER niet meer als variabele heb staan, maar als onderdeel van de bestandsnaam (daar had je in je voorbeeld namelijk een onduidelijke fout in gemaakt). Deze code doet niets anders dan je in 1x naar map H sturen en daar in een ingebouwde SaveAs box je bestandsnaam plaatst. Mocht je een nieuwe naam willen opgeven, dan kan dat daar dus zonder problemen.
 
Edmoor,

Dat was dus precies het probleem :)
Allen hartelijk dank voor de hulp :thumb:

Hij is precies zoals ik wil hebben.
ik ga hem sluiten

Gr Adile
 
Ok dan. Maar toch kan je het dan beter zo doen:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim Bestand As String
    
    Bestand = "H:\ARCHIEF MELDKAMER\RE blanco en orginele formulieren\Excel files\Rapportages\" & "ER Report " & Cells(2, 8) & ".xlsm"
    Select Case MsgBox("Automatisch opslaan?" & vbLf & vbLf & "Kies Ja voor opslaan" & vbLf & "Nee voor een ander naam kiezen" & vbLf & "Annuleren voor helemaal niet opslaan", vbYesNoCancel)
        Case vbYes
            ThisWorkbook.SaveAs Bestand, 52
         Case vbNo
            With Application.FileDialog(msoFileDialogSaveAs)
                .InitialFileName = Bestand
                .FilterIndex = 2
                .Title = "Opslaan ?"
                .AllowMultiSelect = False
                .Show
                .Execute
            End With
         Case vbCancel
            Cancel = True
     End Select
End Sub

Mocht de naam of het pad nog eens moeten veranderen dan hoef je dat maar op 1 punt te doen en dat maakt het ook overzichtelijker. Tevens is hierin de Cancel opgenomen.
 
Even op de reactie van Leo.
Dat het op onderstaande manier niet gaat in de code zoals ik het geschreven heb om de naam in het vakje te krijgen, en bij die van Leo wel.
Code:
.Show Cells(2, 8)

Daar schrijf je achter .show ook "H:\ER" & Cells(2, 8)
Jammer.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan