Een familie van Microsoft-spreadsheetsoftware met hulpmiddelen voor het analyseren, in kaart brengen en communiceren van gegevens.
Disclaimer: Houd er rekening mee dat de verstrekte informatie is vertaald met behulp van automatische vertaaltools. Hoewel we streven naar nauwkeurigheid, is het mogelijk dat de vertalingen niet perfect de betekenis, context of oorspronkelijke bedoeling van de brontekst weergeven.
Hallo Henk G,
GetSaveAsFilename controleert alleen welke bestandsnaam en locatie zijn gekozen. Wanneer daarna bij de Excel-melding Vervangen voor Nee of Annuleren wordt gekozen, wordt SaveAs afgebroken. VBA behandelt dit vervolgens als fout 1004.
U kunt dit voorkomen door vóór SaveAs zelf te controleren of het bestand al bestaat:
Dim filePath As Variant
Dim antwoord As VbMsgBoxResult
filePath = Application.GetSaveAsFilename( _
InitialFileName:="", _
FileFilter:="Excel-werkmap (*.xlsx), *.xlsx")
'Geannuleerd in het venster Opslaan als
If filePath = False Then
newWB.Close SaveChanges:=False
MsgBox "Opslaan geannuleerd.", vbExclamation
Exit Sub
End If
'Controleer of het bestand al bestaat
If Dir(CStr(filePath)) <> "" Then
antwoord = MsgBox( _
"Dit bestand bestaat al. Wilt u het vervangen?", _
vbYesNoCancel + vbQuestion, _
"Bestand vervangen")
If antwoord <> vbYes Then
newWB.Close SaveChanges:=False
MsgBox "Opslaan geannuleerd.", vbExclamation
Exit Sub
End If
End If
'Opslaan zonder een tweede vervangingsmelding
On Error GoTo OpslaanMislukt
Application.DisplayAlerts = False
newWB.SaveAs Filename:=CStr(filePath), FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
sPosition = InStrRev(CStr(filePath), "\")
sNaam = Mid$(CStr(filePath), sPosition + 1)
newWB.Close SaveChanges:=False
MsgBox sNaam, vbInformation, "Bestand succesvol opgeslagen"
Exit Sub
OpslaanMislukt:
Application.DisplayAlerts = True
newWB.Close SaveChanges:=False
MsgBox "Het bestand kon niet worden opgeslagen: " & _
Err.Description, vbExclamation, "Opslaan mislukt"
Hiermee worden alle drie de situaties afgehandeld:
- Annuleren in het venster Opslaan als sluit de nieuwe werkmap.
- Nee of Annuleren bij het vervangen sluit de nieuwe werkmap zonder foutmelding.
- Ja vervangt het bestaande bestand.
Let vooral op de backslash in InStrRev(CStr(filePath), "\"). In de code uit de vraag lijkt deze bij InStrRev te ontbreken.
Mocht je verdere hulp nodig hebben, reageer dan gerust op dit bericht; ik help je graag verder.