Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA: Speichern unter mit vorgegebenem Namen
22.03.2016 10:55:34
Michael
Hallo,
ich habe in meiner Arbeitsmappe 2 Blätter die ich über ein Makro exportiere. Bei diesem Export ist es derzeit so, dass die zwei Blätter unter einem fixen Namen in einem Export-Ordner abspeichere.
Dies möchte ich nun gerne ändern und dem User die Auswahl überlassen, wo er die Datei dann hinspeichern möchte.
Das ist der derzeitige Code:

igPfad = ThisWorkbook.Path & "\Export\"
'Speichern
Worksheets(Array(BlattName, "Muster")).Copy
With ActiveWorkbook
.Sheets("Muster").Visible = True
.SaveAs
.SaveAs igPfad & BlattName & ".xls", 52
.Close 0
.Sheets("Muster").Visible = False
End With

Was muss ich ändern, damit der Dialog "speichern unter" in dem neu erstellten Dokument erscheint und der User den Pfad auswählen muss (Wenn speichern erfolgreich ist okay, wenn abgebrochen wird soll er die Meldung "Achtung! Datei wurde nicht gespeichert!" erscheinen)?
Name des Dokuments soll weiterhin 'BlattName'.xls lauten, ich möchte nur den Pfad selbstbestimmbar machen.
Vielen Dank schon mal im Voraus!
Gruß Michael

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Speichern unter mit vorgegebenem Namen
22.03.2016 11:08:48
Michael
Hallo!
Schematisch so:
Sub PfadAuswahlDialog()
Dim SuchDialog As FileDialog
Dim Pfad As String
Set SuchDialog = Application.FileDialog(msoFileDialogFolderPicker)
With SuchDialog
.Title = "Bitte Verzeichnis wählen"
.AllowMultiSelect = False
If .Show  -1 Then
MsgBox "Datei wurde nicht gespeichert!", vbInformation
Exit Sub
Else: Pfad = .SelectedItems(1) & "\"
End If
End With
ThisWorkbook.SaveAs Pfad & BlattName & ".xls", 52
End Sub
Wo/wie BlattName bei Dir deklariert ist, weiß ich nicht.
LG
Michael

AW: VBA: Speichern unter mit vorgegebenem Namen
22.03.2016 11:15:51
Michael
Hallo Michael,
mein gesamter Code lautet derzeit:

Private Sub CommandButton3_Click()
On Error GoTo Fertig
'Deklaration der Variablen
Dim BlattName As String
Dim igPfad As String
Dim BlattDa As Boolean
'Blattname festlegen
BlattName = ActiveCell.Value
If BlattName = "" Then Exit Sub
'Ordnerpfad für Export bestimmen
igPfad = ThisWorkbook.Path & "\Export\"
'Aktive Zelle prüfen
If ActiveCell.Column  2 Or ActiveCell.Row 

Anzeige
AW: VBA: Speichern unter mit vorgegebenem Namen
22.03.2016 11:31:31
Michael
Hallo!
Du willst wohl, dass ich es Dir einfüge:
Private Sub CommandButton3_Click()
On Error GoTo Fertig
'Deklaration der Variablen
Dim BlattName As String
Dim igPfad As String
Dim BlattDa As Boolean
Dim SuchDialog As FileDialog
'Blattname festlegen
BlattName = ActiveCell.Value
If BlattName = "" Then Exit Sub
'Ordnerpfad für Export bestimmen
Set SuchDialog = Application.FileDialog(msoFileDialogFolderPicker)
With SuchDialog
.Title = "Bitte Verzeichnis wählen"
.AllowMultiSelect = False
If .Show  -1 Then
MsgBox "Datei wurde nicht gespeichert!", vbInformation
Exit Sub
Else: igPfad = .SelectedItems(1) & "\"
End If
End With
'Aktive Zelle prüfen
If ActiveCell.Column  2 Or ActiveCell.Row 
LG
Michael

Anzeige
AW: VBA: Speichern unter mit vorgegebenem Namen
22.03.2016 12:48:37
Michael
Hallo Michael, danke dir!
Allerdings ist das Problem, dass er mich zuerst fragt wohin ich es speichern möchte und erst dann merkt, dass das Blatt nicht da ist. Das Verzeichnis soll er erst nach der Abfrage ob das Datenblatt vorhanden ist abfragen.
Außerdem soll er als Startordner beim Abfragen im Pfad der Ausgangstabelle starten.
Vielen Dank schon mal soweit!
Gruß Michael

Jetzt mal ehrlich...
22.03.2016 13:00:04
Michael
Michael,
...das kannst Du Dir doch wirklich selbst anpassen!
Allerdings ist das Problem, dass er mich zuerst fragt wohin ich es speichern möchte und erst dann merkt, dass das Blatt nicht da ist. Das Verzeichnis soll er erst nach der Abfrage ob das Datenblatt vorhanden ist abfragen.
Der Code-Schnipsel ist da, innerhalb Deines Codes musst Du ja nur die Position verändern.
Außerdem soll er als Startordner beim Abfragen im Pfad der Ausgangstabelle starten.
Davon war ja nie die Rede - und ich bin Deinen Code nicht groß durchgegangen.
*Seufz*... Insgesamt also so, Ergänzung für Start im Ausgangsordner in rot und fett:
Private Sub CommandButton3_Click()
On Error GoTo Fertig
'Deklaration der Variablen
Dim BlattName As String
Dim igPfad As String
Dim BlattDa As Boolean
Dim SuchDialog As FileDialog
Dim Blatt As Worksheet
'Blattname festlegen
BlattName = ActiveCell.Value
If BlattName = "" Then Exit Sub
'Aktive Zelle prüfen
If ActiveCell.Column  2 Or ActiveCell.Row .InitialFileName = ThisWorkbook.Path
If .Show -1 Then MsgBox "Datei wurde nicht gespeichert!", vbInformation Exit Sub Else: igPfad = .SelectedItems(1) & "\" End If End With 'Speichern Worksheets(Array(BlattName, "Beispiel")).Copy With ActiveWorkbook .Sheets("Beispiel").Visible = True .SaveAs igPfad & BlattName & ".xls", 52 .Close 0 .Sheets("Beispiel").Visible = False End With Else MsgBox "Blatt mit dem Namen " & BlattName & " ist nicht vorhanden!" & _ "Bitte zuerst das Blatt erstellen!" Selection.Hyperlinks.Delete ActiveCell.BorderAround ColorIndex:=5, Weight:=xlThin With Selection.Font .Name = "Arial" .Size = 10 .ColorIndex = xlAutomatic .Underline = xlUnderlineStyleNone End With Exit Sub End If Fertig: End Sub
LG
Michael

Anzeige
AW: Jetzt mal ehrlich...
22.03.2016 13:40:38
Michael
Hallo Michael,
hatte das mit dem Verschieben des SuchDialog's auch schon versucht, allerdings habe ich dauernd Fehlermeldungen bekommen. Hatte leider vergessen etwas mitzukopieren... Und als ich es gemerkt und korrigiert hatte und hier wieder schreiben wollte, hat sich das Forum nicht aufgebaut, sodass ich es nicht mehr schnell genug schreiben konnte. Tut mir leid, bin in VBA noch nicht so firm und habe da die letzten Tage auch viele Fehler mit erzeugt.
Dass vom Startpunkt des Speicherns vorher keine Rede war das stimmt, allerdings wusste ich auch nicht wo der "Speichern unter" Dialog anfänglich hinverweist. Mit deinem Befehl funktioniert es schon soweit, nur trägt er beim Dialog unten auch noch mal den Ordner ein und das funktioniert dann nicht mehr (siehe Bild, Datei liegt im Ordner "Beispiel", der "Speichern unter"-Dialog startet auch in dem Ordner "Beispiel" scheint es aber in einen darin liegenden Unterordner "Beispiel" speichern zu wollen)
Userbild
Gruß Michael

Anzeige
AW: Jetzt mal ehrlich...
22.03.2016 13:43:10
Michael
Hallo Michael,
hatte das mit dem Verschieben des SuchDialog's auch schon versucht, allerdings habe ich dauernd Fehlermeldungen bekommen. Hatte leider vergessen etwas mitzukopieren... Und als ich es gemerkt und korrigiert hatte und hier wieder schreiben wollte, hat sich das Forum nicht aufgebaut, sodass ich es nicht mehr schnell genug schreiben konnte. Tut mir leid, bin in VBA noch nicht so firm und habe da die letzten Tage auch viele Fehler mit erzeugt.
Dass vom Startpunkt des Speicherns vorher keine Rede war das stimmt, allerdings wusste ich auch nicht wo der "Speichern unter" Dialog anfänglich hinverweist. Mit deinem Befehl funktioniert es schon soweit, nur trägt er beim Dialog unten auch noch mal den Ordner ein und das funktioniert dann nicht mehr (siehe Bild, Datei liegt im Ordner "Beispiel", der "Speichern unter"-Dialog startet auch in dem Ordner "Beispiel" scheint es aber in einen darin liegenden Unterordner "Beispiel" speichern zu wollen)
Userbild
Gruß Michael

Anzeige
Kann ich nicht nachvollziehen...
22.03.2016 14:19:44
Michael
Michael!
Hier Dein Code nochmal etwas gesäubert, läuft bei mir durch.
On Error hab ich entfernt, inkl. der Sprungmarke - ist nicht nötig. Was mir noch nicht klar ist: Willst Du mit oder ohne Makros speichern?
Private Sub CommandButton3_Click()
'Deklaration der Variablen
Dim BlattName As String
Dim igPfad As String
Dim BlattDa As Boolean
Dim SuchDialog As FileDialog
Dim Blatt As Worksheet
'Blattname festlegen
BlattName = ActiveCell.Value
If BlattName = "" Then Exit Sub
'Aktive Zelle prüfen
If ActiveCell.Column  2 Or ActiveCell.Row  -1 Then
MsgBox "Datei wurde nicht gespeichert!", vbInformation
Exit Sub
Else: igPfad = .SelectedItems(1) & "\"
End If
End With
'Speichern
Worksheets(Array(BlattName, "Beispiel")).Copy
With ActiveWorkbook
.Worksheets("Beispiel").Visible = False
.SaveAs igPfad & BlattName, 52
.Close
End With
Else
MsgBox "Blatt mit dem Namen " & BlattName & " ist nicht vorhanden!" & _
"Bitte zuerst das Blatt erstellen!"
Selection.Hyperlinks.Delete
ActiveCell.BorderAround ColorIndex:=5, Weight:=xlThin
With Selection.Font
.Name = "Arial"
.Size = 10
.ColorIndex = xlAutomatic
.Underline = xlUnderlineStyleNone
End With
Exit Sub
End If
End Sub
Ansonsten - Beispielmappe!
LG
Michael

Anzeige
AW: Kann ich nicht nachvollziehen...
23.03.2016 08:41:07
Michael
Hallo Michael,
speichern ohne Makros reicht. Die Makros sitzen nur in meiner Übersichtstabelle. Da ich nur einzelne Blätter exportiere die ohne Makros sind, reichen mir diese als xls.
Habe mal die Datei hochgeladen: https://www.herber.de/bbs/user/104549.xlsm
Habe die Datei jetzt mal auf den Desktop kopiert. Da habe ich das gleiche Problem beim exportieren: Er fragt mich wo ich es hin speichern möchte. Als Startpunkt für die Auswahl setzt er den Ordner Desktop (wie gewünscht)zeigt aber in dem Dialog unten noch mal in dem Feld "Ordner:" Desktop an (analog zum oben genannten Beispiel im Bild mit "Beispiel"). Das führt dazu, dass er die Dabei theoretisch im Ordner Desktop/Desktop speichern möchte, den es nicht gibt. Und dann sagt er natürlich der Pfad sei nicht vorhanden (so wie beim Screenshot der Ordner Beispiel/Beispiel. Das Feld unten müsste also unbelegt sein.
Danke schon mal.
Gruß Michael

Anzeige
Aufgeräumt und geputzt...
23.03.2016 13:45:07
Michael
Michael,
...tut Dein Export-Makro schon was es soll. Hab mir jetzt nur Deinen Code für CommandButton3, also Export, angeschaut. Grds. würde Deinen Makros etwas mehr Ordnung und Übersicht gut tun, bspw. hab ich Dir die Prüfung, ob das jeweilige Blatt vorhanden ist, in eine eigene Funktion ausgelagert.
Beim Datei-Auswahldialog hab ich bei .InitialFileName noch einen "\" vergessen, genauso ist jetzt eine Prüfung drin, die den fehlenden "\" am Ende des Pfad-Strings noch ergänzt, wenn erforderlich.
Beim Speichern ersetze ich noch den Punkt im Dateinamen durch einen "_"; das ist beim Speichern gar nicht gut.
Läuft einwandfrei.
Private Sub CommandButton3_Click()
Dim DieseMappe As Workbook
Dim ZielMappe As Workbook
Dim ExportBlatt As String
Dim DateiName As String
Dim Pfad As String
Dim PfadDialog As FileDialog
Application.ScreenUpdating = False
Set DieseMappe = ThisWorkbook
With ActiveCell
If .Value = vbNullString Then Exit Sub
If .Column  2 Or .Row  -1 Then
MsgBox "Vorgang abgebrochen", vbInformation
Exit Sub
Else: Pfad = .SelectedItems(1)
End If
End With
If Not Right(Pfad, 1) = "\" Then Pfad = Pfad & "\"
DateiName = Replace(ExportBlatt, ".", "_")
With ZielMappe
.Worksheets("Muster").Visible = xlSheetHidden
.SaveAs Filename:=Pfad & DateiName, FileFormat:=51
.Close savechanges:=True
End With
Set DieseMappe = Nothing
Set ZielMappe = Nothing
Set PfadDialog = Nothing
Application.ScreenUpdating = True
End Sub
Function BlattExistiert(Wb As Workbook, Blatt As String) As Boolean
'Wahr, wenn ein Tabellenblatt mit Namen = Blatt in der Mappe vorhanden ist
Dim Ws As Worksheet
BlattExistiert = False
For Each Ws In Wb.Worksheets
If Ws.Name = Blatt Then
BlattExistiert = True
Exit Function
End If
Next Ws
End Function
LG
Michael

Anzeige
AW: Aufgeräumt und geputzt...
23.03.2016 15:26:38
Michael
Hallo Michael,
da hast du durchaus recht.... Ich werde meinen Code mal aufräumen und auch mal teilweise ausmisten... Danke dir für den Code, der passt soweit gut, mir ist nur eine Sache noch aufgefallen:
Beim ersten Export-Abruch läuft es super. Dann kommt die Mitteilung, dass es nicht exportiert wurde. Wenn ich aber ein zweites mal exportiere (ich bestätige den Ort, wo er es ablegen soll, dort liegt aber nun schon eine Datei mit gleichem Namen) und den Ablegeort bestätige erscheint die Meldung dass dort schon eine Datei mit dem gleichen Namen liegt. Bis hierhin alles gut. Ich kann mich dann entscheiden, die Datei zu überschreiben (Auswahl "ja", "nein", "Abbrechen"). Wenn ich es tue funktioniert es auch, sobald ich aber "nein" oder "Abbrechen" wähle kommt ein Laufzeitfehler 1004: Die Methode 'SaveAs' für das Objekt '_Workbook' ist fehlgeschlagen. Im Debugger hält er dann bei

With ZielMappe
.SaveAs Filename:=Pfad & DateiName, FileFormat:=51
.Close savechanges:=True
End With
an. Vorher war das glaube ich über die Funktion OnError und der Sprungmarke, dass er die Funktion dann einfach beendet hat. Was müsste ich denn noch einfügen, damit er in dem geschilderten Fall dann nicht mehr hängen bleibt (könnte ja einfach melden, dass die Datei nicht gespeichert wurde und beendet es damit)?
Lg Michael

Anzeige
Bin heute schon weg, passe ich morgen an, ok?! owT
23.03.2016 16:39:54
Michael

AW: Bin heute schon weg, passe ich morgen an, ok?! owT
24.03.2016 07:34:01
Michael
Ja, alles gut. Hast mir ja schon viel geholfen, da mach dir keinen Stress. Danke!
Gruß

Meine Ergänzung schon gesehen? Passt? owT
25.03.2016 08:50:47
Michael

Ergänzung...
24.03.2016 11:31:13
Michael
Hallo Michael!
Hier nochmal der gesamte, überarbeitete Code für Deinen CommandButton3. Hab folgendes ergänzt: Es wird beim Speichern der Export-Datei geprüft, ob diese am gewählten Ort schon vorhanden ist; wenn nicht wird gespeichert wie bisher, wenn schon, erhält der Benutzer die Möglichkeit bewusst zu überschreiben oder aber abzubrechen.
Private Sub CommandButton3_Click()
Dim DieseMappe As Workbook
Dim ZielMappe As Workbook
Dim ExportBlatt As String
Dim DateiName As String
Dim Pfad As String
Dim PfadDialog As FileDialog
Dim Ersetzen As Variant
Application.ScreenUpdating = False
Set DieseMappe = ThisWorkbook
With ActiveCell
If .Value = vbNullString Then Exit Sub
If .Column  2 Or .Row  -1 Then
MsgBox "Vorgang abgebrochen", vbInformation
Exit Sub
Else: Pfad = .SelectedItems(1)
End If
End With
If Not Right(Pfad, 1) = "\" Then Pfad = Pfad & "\"
DateiName = Replace(ExportBlatt, ".", "_")
If Not Dir(Pfad & DateiName & ".xls*", vbDirectory) = vbNullString Then
Ersetzen = MsgBox("Datei bereits vorhanden! Überschreiben?", _
vbOKCancel, "Datei ersetzen?")
Select Case Ersetzen
Case Is = vbOK
With ZielMappe
Application.DisplayAlerts = False
.Worksheets("Muster").Visible = xlSheetHidden
.SaveAs Filename:=Pfad & DateiName, FileFormat:=51
.Close savechanges:=True
End With
Case Is = vbCancel
MsgBox "Abbruch! Datei wird nicht gespeichert!", vbInformation, "Abbruch"
ZielMappe.Close savechanges:=False
End Select
Else:
With ZielMappe
.Worksheets("Muster").Visible = xlSheetHidden
.SaveAs Filename:=Pfad & DateiName, FileFormat:=51
.Close savechanges:=True
End With
End If
Set DieseMappe = Nothing
Set ZielMappe = Nothing
Set PfadDialog = Nothing
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
Function BlattExistiert(Wb As Workbook, Blatt As String) As Boolean
'Wahr, wenn ein Tabellenblatt mit Namen = Blatt in der Mappe vorhanden ist
Dim Ws As Worksheet
BlattExistiert = False
For Each Ws In Wb.Worksheets
If Ws.Name = Blatt Then
BlattExistiert = True
Exit Function
End If
Next Ws
End Function
LG
Michael

AW: VBA: Speichern unter mit vorgegebenem Namen
22.03.2016 11:30:09
Michael
Hallo Michael,
mein gesamter Code lautet derzeit:

Private Sub CommandButton3_Click()
On Error GoTo Fertig
'Deklaration der Variablen
Dim BlattName As String
Dim igPfad As String
Dim BlattDa As Boolean
'Blattname festlegen
BlattName = ActiveCell.Value
If BlattName = "" Then Exit Sub
'Ordnerpfad für Export bestimmen
igPfad = ThisWorkbook.Path & "\Export\"
'Aktive Zelle prüfen
If ActiveCell.Column  2 Or ActiveCell.Row 

332 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige