Wie kann ich bei Excel einen Button erstellen der abspeichert?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.


LukeatWork 
Fragesteller
 26.09.2018, 11:52

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? :/

0
daCypher  26.09.2018, 12:01
@LukeatWork

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
1
daCypher  26.09.2018, 12:41
@LukeatWork

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.

2
LukeatWork 
Fragesteller
 26.09.2018, 12:48
@daCypher
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

0
daCypher  26.09.2018, 12:52
@LukeatWork

Erscheint auch eine Fehlermeldung, wenn du die Datei per Hand speicherst? Also "Speichern unter..." und dann halt als Pfad "%userprofile%\Desktop\Test.xls"

1
LukeatWork 
Fragesteller
 26.09.2018, 13:03
@daCypher

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?

0
daCypher  26.09.2018, 13:12
@LukeatWork

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

1
Iamiam  26.09.2018, 13:27
@LukeatWork

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)

1
LukeatWork 
Fragesteller
 26.09.2018, 13:40
@daCypher

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

0
LukeatWork 
Fragesteller
 26.09.2018, 13:40
@Iamiam

Ja stimmt, bei mir ist das auch gelb Hinterlegt

0
daCypher  26.09.2018, 13:47
@LukeatWork

Dann schreib den Pfad in die Funktion am besten mal fest rein.

ActiveWorkbook.SaveAs "R:\Test.xlsm", xlOpenXMLWorkbookMacroEnabled
1
LukeatWork 
Fragesteller
 26.09.2018, 13:58
@daCypher

Super das funktioniert!

Wie änder ich das jetzt, dass es den inhalt von A1 als speichernamen nimmt?

0
daCypher  26.09.2018, 14:09
@LukeatWork

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")

1
LukeatWork 
Fragesteller
 26.09.2018, 14:13
@daCypher ES FUNKTIONIERT!

Vielen lieben Dank! Genau so wollte ich es haben!

Vielen dank für dein Durchhaltevermögen!

1
daCypher  26.09.2018, 14:16
@LukeatWork

Juhuu, endlich :D

Gerne, du hattest ja auch sehr viel Durchhaltevermögen.

1
Iamiam  26.09.2018, 19:18
@LukeatWork

das kann ich nur bekräftigen! Du hast mit daCypher aber auch einen der kompetentesten Makroschreiber hier erwischt! DH!

1
Iamiam  26.09.2018, 13:21

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

1
Iamiam  26.09.2018, 19:15
@LukeatWork

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.

1
Iamiam  28.09.2018, 00:18
@Iamiam

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

0

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.

Woher ich das weiß:Berufserfahrung – Programmierer

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."


LukeatWork 
Fragesteller
 26.09.2018, 11:28

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).

0