Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.10.2025 10:28:49
16.10.2025 17:40:39
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Speichern unter

VBA Speichern unter
Bernd
Hallo Excelfreunde,
habe ein Problem, das ich leider selbst nicht lösen kann. Habe schon versucht etwas zu basteln, aber aus meiner Sicht ist dies alles andere als optimal. Außerdem funktioniert es nicht so wie ich es mir vorstelle.
Also: Eine Exceldatei soll, nachdem in dieser etwas verändert wurde, beim Speichervorgang das "Speichern unter"-Fenster öffnen. Als Dateityp soll "Microsoft Office Excel-Arbeitsmappe (*.xls) eingestellt sein, damit man bei der Vergabe eines Dateinamens nicht noch die Endung eingeben muss. Nachdem der User einen Dateinamen vergeben hat, soll vorher geprüft werden, ob der Dateiname maximal 40 Zeichen lang ist. Ist der Dateiname länger, dann sollte eine entsprechende Meldung kommen, dass der Dateiname zu lang ist und so nicht gespeichert werden kann. Ist der Dateiname Achso, noch etwas habe ich vergessen. Als Pfad für die neue Datei (speichern unter) soll immer der Pfad der Ursprungsdatei genommen werden.
Wäre nett, wenn jemand eine Lösung hat! Mein Versuch sieht so aus:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim strName As String
Dim pfad As String
'On Error GoTo errHandler
Application.Dialogs(xlDialogSaveAs).Show ("Maximal 40 Zeichen")
pfad = ThisWorkbook.Path
strName = Application.GetSaveAsFilename (“Excel Dateien (*.xls), *.xls”)
If Len(fFilename(strName)) > 40 Then
MsgBox fFilename(strName)
MsgBox "Dateiname zu lang"
Cancel = True
Else
Application.EnableEvents = False
ThisWorkbook.SaveAs strName, FileFormat:=xlNormal
Application.EnableEvents = True
End If
'errHandler:
'Application.EnableEvents = True
'Cancel = True
End Sub

Public Function fFilename(DateinameMitPfad As String)
fFilename = Mid(DateinameMitPfad, InStrRev(DateinameMitPfad, "\", -1) + 1)
End Function
Für Eure Hilfe vielen Dank im Voraus!
Gruß
Bernd
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Speichern unter
16.06.2012 17:28:17
Hajo_Zi
Hallo Bernd,
Option Explicit
Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim strName As String
Dim pfad As String
ChDir ThisWorkbook.Path
strName = Application.GetSaveAsFilename("Excel Dateien (*.xls), *.xls")
If Len(fFilename(strName)) > 40 Then
MsgBox "Dateiname zu lang"
Cancel = True
Else
ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & strName, FileFormat:=xlNormal
End If
End Sub

Anzeige
AW: VBA Speichern unter
18.06.2012 07:57:02
Bernd
Hallo Hajo,
vielen Dank für Deine Antwort.
Ich habe Dein Makro in "Diese Arbeitsmappe" kopiert. Beim Speicherversuch hat er mir "fFilename" markiert und die Meldung "Fehler beim Kompilieren: Sub oder Function nicht definiert" angezeigt.
Was mache ich falsch bzw. habe ich vergessen?
Vielen Dank im Voraus.
Gruß
Bernd
Anzeige
AW: VBA Speichern unter
18.06.2012 12:31:08
Rudi
Hallo,
die Function war auch in deinem Ursprungscode enthalten.
Gruß
Rudi
AW: VBA Speichern unter
18.06.2012 16:41:10
Bernd
Hallo Rudi,
vielen Dank für die Rückmeldung. Ja, hatte ich übersehen, weil ich eigentlich auch nicht wirklich Ahnung davon habe.
So, habe jetzt die Function hinzugefügt, aber es läuft noch nicht so, wie ich es mir vorgestellt hatte. Als Dateityp zeigt Excel nach wie vor "Alle Dateien" an und der vorgeblendete Dateiname ist in Anführungsstriche gesetzt.
Wenn mann nun einen Dateinamen vergibt und die Endung .xls weglässt, dann wird die Datei zwar gespeichert, aber nicht im Excelformat.
Hat noch jemand eine Idee?
Vielen Dank und Gruß
Bernd
Anzeige
AW: VBA Speichern unter
18.06.2012 17:43:07
Hajo_Zi
Hallo Bernd,
habe ich übersehen. Schreibe nur Len(strName) oder Len(Mid(strName, instrev(strName, "\")))
Gruß Hajo
AW: VBA Speichern unter
19.06.2012 07:51:07
Bernd
Hallo Hajo,
vielen Dank für Deine Rückmeldung. Allerdings bin ich mit Deiner Rückmeldung etwas überfordert. Ich weiß nicht wohin ich das einfach schreiben soll.
Wenn der Aufwand nicht allzu groß ist, könntest Du mir bitte eine Datei mit dem endgültigen Code hochladen. Wäre wirklich nett und Du würdest mir eine Menge Zeit sparen!
VIELEN DANK im Voraus!
Gruß
Bernd
Anzeige
AW: VBA Speichern unter
19.06.2012 16:55:43
Hajo_Zi
Hallo Bernd,
Ich baue keine Datei nach, die Zeit hat schon jemand investiert. Ein Link zur Datei wäre nicht schlecht.
In Deinem Code Das Len() durch meinen zweiten Vorschlag ersetzen.
Gruß Hajo
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Speichern unter mit Dialog und Zeichenlängenprüfung


Schritt-für-Schritt-Anleitung

  1. Öffne VBA-Editor: Drücke ALT + F11 in Excel, um den VBA-Editor zu öffnen.

  2. Gehe zu "Diese Arbeitsmappe": Wähle im Projektfenster die Arbeitsmappe aus, in der Du den Code einfügen möchtest.

  3. Füge den folgenden Code ein:

    Option Explicit
    
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
       Dim strName As String
       Dim pfad As String
    
       ChDir ThisWorkbook.Path
       strName = Application.GetSaveAsFilename("Excel Dateien (*.xls), *.xls")
    
       If Len(fFilename(strName)) > 40 Then
           MsgBox "Dateiname zu lang"
           Cancel = True
       Else
           ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & strName, FileFormat:=xlNormal
       End If
    End Sub
    
    Public Function fFilename(DateinameMitPfad As String)
       fFilename = Mid(DateinameMitPfad, InStrRev(DateinameMitPfad, "\", -1) + 1)
    End Function
  4. Speichere die Arbeitsmappe: Schließe den VBA-Editor und speichere Deine Arbeitsmappe als Makro-fähige Excel-Datei (*.xlsm).

  5. Teste den Code: Ändere etwas in der Datei und versuche, sie zu speichern. Das "Speichern unter"-Fenster sollte jetzt erscheinen.


Häufige Fehler und Lösungen

  • Fehler: "Sub oder Function nicht definiert"

    • Lösung: Stelle sicher, dass die Funktion fFilename im gleichen Modul wie der Workbook_BeforeSave-Code definiert ist.
  • Problem: Dateiname wird nicht korrekt erkannt

    • Lösung: Achte darauf, dass die Len()-Funktion die Länge des Dateinamens prüft, ohne Anführungszeichen.
  • Excel zeigt "Alle Dateien" an

    • Lösung: Stelle sicher, dass der Filter im GetSaveAsFilename korrekt angegeben ist, wie im obigen Code.

Alternative Methoden

  1. Tastenkombination verwenden: Du kannst die Strg + S-Tastenkombination verwenden, um die Datei schnell zu speichern, ohne den Dialog zu öffnen.
  2. Direktes Speichern ohne Dialog: Wenn Du sicher bist, was Du speicherst, kannst Du die Methode ThisWorkbook.SaveAs direkt ohne den Dialog verwenden.

Praktische Beispiele

  • Beispiel 1: Wenn Du eine Datei mit dem Namen "Bericht" speicherst, wird der Dialog "Speichern unter" geöffnet und der Pfad ist der der Ursprungsdatei.
  • Beispiel 2: Wenn der Benutzer einen Dateinamen von mehr als 40 Zeichen eingibt, erscheint eine Nachricht: "Dateiname zu lang", und das Speichern wird abgebrochen.

Tipps für Profis

  • Erweiterte Fehlerbehandlung: Füge On Error Resume Next hinzu, um unerwartete Fehler abzufangen und eine benutzerfreundlichere Erfahrung zu bieten.
  • Benutzerdefinierte Dialoge: Du kannst eigene Dialoge erstellen, um die Benutzeroberfläche noch ansprechender zu gestalten.
  • Zeichenbeschränkungen anpassen: Ändere die 40 in der Len()-Funktion, um die maximal zulässige Zeichenanzahl zu ändern.

FAQ: Häufige Fragen

1. Warum öffnet sich das "Speichern unter"-Fenster nicht? Stelle sicher, dass Du den Code im richtigen Modul platziert hast und die Ereignisse in Excel aktiviert sind.

2. Wie kann ich den Speicherort für die Datei anpassen? Ändere die Zeile ThisWorkbook.Path auf den gewünschten Speicherort.

3. Was mache ich, wenn Excel beim Speichern abstürzt? Überprüfe die verwendeten VBA-Funktionen auf Fehler und stelle sicher, dass Deine Excel-Version aktuell ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige