Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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

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

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

189 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige