Wie kann ich bei Excel einen Button erstellen der abspeichert?
Hallo,
Ich würde gerne bei Excel einen Button erstellen, der die Excel mappe auf dem Desktop abspeichert. Der Name der Datei soll in Zeile A1 stehen.
Den Button habe ich bereits erstellt. Ich scheitere noch bei dem Makro, weil ich keine ahnung davon habe. Ich habe etwas im Internet gefunden, was meinen Vorstellungen nahe kommt. Ich habe versucht es anzupassen, aber irgendwie klappt das alles nicht.
Sub Schaltfläche1_Klicken()
Dim lw_pfad As String
lw_pfad = ActiveSheet.Range("A1").Value
lw_pfad = InputBox("Geben Sie hier das Laufwerk und den Pfad an, wo die Datei gespeichert werden soll." & Chr(13) & Chr(13) & "(Ihre Eingabe wird in A1 als neuer Default-Wert gespeichert.)", "Datei speichern unter...", lw_pfad)
If lw_pfad = "" Then
MsgBox "Die Datei wird nicht gespeichert, da Sie [Abbrechen] gedrückt oder nichts eingegeben haben.", , "Abbruch"
Exit Sub
Else
If Right(lw_pfad, 1) <> "\" Then lw_pfad = lw_pfad & "\"
ActiveSheet.Range("A1").Value = lw_pfad
Rem MsgBox lw_pfad
ActiveWorkbook.SaveAs lw_pfad & ActiveSheet.Range("B2").Value & ActiveSheet.Range("C4").Value & ".xls"
MsgBox "Die Datei wurde unter " & lw_pfad & ActiveSheet.Range("B2").Value & ActiveSheet.Range("C4").Value & ".xls gespeichert.", , "OK"
End If
End Sub
Das ist, was ich bis jetzt habe.
Vielen Dank für die Hilfe im Voraus!
4 Antworten
Also bis jetzt ist es (mit einigen Umwegen) so, dass beim Klick auf den Button ein Eingabefeld aufgeht, wo du den Pfad eingeben kannst. Das wird in A1 gespeichert und mit den Werten aus B2 und C4 (?) zusammengefasst, um den Namen für die Mappe zu bilden.
So, wie ich dich verstehe willst du aber in A1 den Namen der Datei eingeben und sie soll automatisch auf dem Desktop gespeichert werden, wenn du den Button drückst. Also ohne dass da noch ein Eingabefenster aufgeht.
Das würde so gehen:
Sub Schaltfläche1_Klicken()
ActiveWorkbook.SaveAs Environ("userprofile") & "\Desktop\" & ActiveSheet.Range("A1") & ".xlsm", xlOpenXMLWorkbookMacroEnabled
End Sub
Mit diesem Environ("userprofile") & "\Desktop\" wird der Ordnerpfad deines Desktops ausgelesen, dann wird der Inhalt von A1 drangehängt und dann halt das "xlsm", was für Excel mit Makros steht. Das xlOpenXMLWorkbookMacroEnabled dahinter ist ein Hinweis für die Speicherroutine, dass es halt im neuesten Excelformat mit Makros gespeichert werden soll.
nach "speichern unter" steht die offene Datei im neuen Pfad. Dir im alten Pfad ist grschlossen (ohne speichern bzw auf dem letzten Stand, wo sie vorher gespeichert wurde.
Um zu sehen, auf welcher Datei Du gerade arbeitest, kannst Du die Formel
=Zelle("Dateiname") eingeben. Gibst Du den in A2 ein, solltest Du
=Zelle("Dateiname";A2) eingeben, dann kannst Du sie beliebig kopieren/verschieben.
Um das immer sehen zu können, sollte die Zelle beim Scrollen nicht aus dem Bildschirm wandern. Deshalb empfiehlt es sich, zB die Zelle B3 zu markieren und Fenster einfrieren+Fenster einfrieren zu wählen. Dann ist sowohl die Spalte A wie auch die Zeilen 1+2 als Titel fixiert und A1 und A2 bleiben IMMER, die Zeilen 1+2 beim Scrollen nach unten und die Spalte A beim Scrollen nach rechts sichtbar.
Ich mach das immer mit sogar mehr Zeilen und Spalten und platziere links oben die Knöpfe für die Makros.
und noch was: ich nehm schon lange nicht mehr die Vorgabe-Buttons, sondern erstelle ein Textfeld, beschrifte es sinnvoll, formatiere es nach eigenem Gusto und weise es dann dem Makro zu. Funkt ausgezeichnet und ist viel variabler!
Auch Autoformen wie Blockpfeile etc lassen sich entsprechend sinnvoll einsetzen
Vielen Dank für die tolle Erklärung!
Du hast mich genau richtig verstanden.
Ich habe deinen Code jetzt einfach mal blind Kopiert und eingefühft.
Jetzt bekomme ich aber eine Fehlermeldung:
Laufzeitfehler '1004':
Die Methode 'SaveAs' für das Objekt'_Workbook' ist fehlgeschlagen
"Fortfahren" ist ausgegraut, möglich sind nur "Beenden", "Debuggen" (was auch immer das ist), und "Hilfe".
Was habe ich denn jetzt schon wieder falsch gemacht? :/
Hmm, die Fehlermeldung ist jetzt nicht besonders vielsagend. Kann vielleicht sein, dass du eine ältere Excel-Version hast. Versuch mal das hier:
ActiveWorkbook.SaveAs Environ("userprofile") & "\Desktop\" & ActiveSheet.Range("A1") & ".xls", xlExcel8
Dann weiß ich leider auch nicht weiter. Bei hat es problemlos funktioniert. Sind vielleicht im Dateinamen in der Zelle A1 irgendwelche Zeichen drin, die nicht für Dateinamen geeignet sind (probier mal was einfaches, wie z.B. "Test")?
Probier vielleicht, ob Excel die Konstante "xlExcel8" überhaupt kennt. (Am einfachsten im Visual Basic Fenster Strg+G drücken, damit der Direktbereich aufgeht und da dann ?xlExcel8 eingeben. Wenn du Enter drückst, müsste er 56 hinschreiben.
Mehr Ursachen fallen mir grade leider nicht ein.
probier mal was einfaches, wie z.B. "Test"
Das habe ich auch getestet, da hat sich aber leider auch nichts geändert...
Probier vielleicht, ob Excel die Konstante "xlExcel8" überhaupt kennt. (Am einfachsten im Visual Basic Fenster Strg+G drücken, damit der Direktbereich aufgeht und da dann ?xlExcel8 eingeben. Wenn du Enter drückst, müsste er 56 hinschreiben.
Das habe ich gerade gemacht und es erscheint (wie du gesagt hast) eine 56
Erscheint auch eine Fehlermeldung, wenn du die Datei per Hand speicherst? Also "Speichern unter..." und dann halt als Pfad "%userprofile%\Desktop\Test.xls"
Nein, dann kommt keine Fehlermeldung.
Könnte es daran liegen, dass ich auf einen Server Arbeite (bin bei der Arbeit) und er deswegen probleme hat das "userprofile" zu finden?
Das sollte eigentlich trotzdem vorhanden sein, aber das kannst du natürlich auch nochmal ausprobieren. Einfach im Direktbereich ?Environ("userprofile") eingeben. Sollte sowas wie "C:\Users\Luke" rauskommen
Beim Debuggen wird die Ausführung des Makros erst mal dauerhaft gestoppt, der Code gezeigt und die Stelle, die zum Fehler führt, farblich hinterlegt (wie, kann man einstellen, ich hatte das immer mit Hintergrund gelb, weiß nicht mehr, ob das Vorgabe war)
Ich habe es getestet und mir ist aufgefallen, dass er noch auf ein anderes Laufwerk zugreift. Aber selbst in dem anderen Laufwerk hat er es nicht abgespeichert...
Wenn ich den Befehl eingebe zeigt er an "E:\Users\Luke" er soll aber eigentlich zu Laufwerk "R:"
Das wird mir hier echt zu viel :D
Ja stimmt, bei mir ist das auch gelb Hinterlegt
Dann schreib den Pfad in die Funktion am besten mal fest rein.
ActiveWorkbook.SaveAs "R:\Test.xlsm", xlOpenXMLWorkbookMacroEnabled
Super das funktioniert!
Wie änder ich das jetzt, dass es den inhalt von A1 als speichernamen nimmt?
Entweder
ActiveWorkbook.SaveAs ActiveSheet.Range("A1"), xlOpenXMLWorkbookMacroEnabled
dann muss in A1 der komplette Pfad drinstehen (z.B. "R:\Luke\Dateien\Arbeit\MeineMappe.xlsx"). Oder:
ActiveWorkbook.SaveAs "R:\" & ActiveSheet.Range("A1") & ".xlsm", xlOpenXMLWorkbookMacroEnabled
dann steht in A1 halt nur der eigentliche Dateiname drin (also z.B. nur "MeineMappe")
Vielen lieben Dank! Genau so wollte ich es haben!
Vielen dank für dein Durchhaltevermögen!
das kann ich nur bekräftigen! Du hast mit daCypher aber auch einen der kompetentesten Makroschreiber hier erwischt! DH!
Ich würde sagen, dass du dir einfach die InputBox sparen solltest. Selbst lw_pfad kannst du dir schenken.
Um ein funktionierendes, ausbaufähiges Beispiel zu bekommen reicht es, wenn du den Befehl ActiveWorkbook.SaveAs ActiveSheet.Range("A1").Value ausführen würdest.
Wenn das klappt, kannst du damit weiter arbeiten.
Sowas:
Sub Schaltfläche1_Klicken()
Dim path As String
Dim filename As String
path = "C:\Users\DeinUser\Desktop\SaveExcel\"
filename = Range("A1")
ActiveWorkbook.SaveAs filename:=Path & filename & ".xls", FileFormat:=xlNormal
End Sub
Die Texte hast du allerdings schon an deinen speicherort geänder oder? =) hier fehlt der befehl wo die speicherung stattfinden soll
"Geben Sie hier das Laufwerk und den Pfad an, wo die Datei gespeichert werden soll."
Sorry das verstehe ich nicht ... Ich beschäftige mich auch das erste Mal damit...
Also muss ich da jetzt im code wo "Geben Sie hier das Laufwerk und den Pfad an, wo die Datei gespeichert werden soll." steht den Pfad angeben, wo die datei gespeichert werden soll?
Ich will nicht den Pfad in der Popup-Meldung angeben, weil das nicht so Benutzerfreundlich ist (andere sollen auch mit der Datei arbeiten können).
Du bist dir aber schon bewusst, dass du ab dann die Datei im neuen Pfad bearbeitest? (sie bleibt mit nur save as ja offen!) Es empfiehlt sich, in einer Zelle eines fixierten Titels die Formel =Zelle("Dateiname";A1) zu hinterlegen am besten anstatt A1 die Adresse der Formel (also selbstreferenzierend)
Zur Fehlermeldung kann ich nichts sagen