Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Dateien per VBA als xlsx auf Server speichern
#1
Hallo liebe Forengemeinde,

ich habe folgende Situation:
Jede Woche muss ich einzelne Dokumente per Mail verschicken und diese zusätzlich auf einem Netzlaufwerk speichern.
Für den wöchentlichen Mailversand habe ich mir ein eigenes Dokument erstellt, indem ich per Knopfdruck alle Dokumente auf den Weg bringe.

Für das Abspeichern bin ich noch etwas ratlos. 
Code:
Sub SaveToServer()
       Dim SaveName As String
       SaveName = ActiveSheet.Range("B25").Text
       Application.DisplayAlerts = False
       ActiveWorkbook.SaveAs Filename:="X:\2021_DE\Reporting\...\" & _
           SaveName & ".xlsx"
   End Sub
Diesen Code hatte ich bei meiner Recherche entdeckt und der speichert leider nicht in dem Format ab...Laufzeitfehler 1004. XLSX mag er nicht mit Makro...aber ich kann auch nicht auswählen "Trotzdem speichern" oder ähnliches.
Meine Wunschlösung wäre ein Code in einem separaten Dokument, dass die aktuellste Reporting-Datei unter neuem Namen speichert (das ist immer Reporting Name mit Datum als Jahr Monat Tag) und zwar direkt auf meinem PC und im Netzlaufwerk.

Wie kann ich das erreichen? Wer die Muße hat seinen Code zu kommentieren, dafür bin ich immer dankbar, weil ich gerne dazulerne :) zumindest grob verstehen möchte ich was es braucht!

Grüße Phiant
Antworten Top
#2
Hallo Phiant,

willst Du mit Makros speichern, probier mal:

Code:
ActiveWorkbook.SaveAs Filename:="X:\2021_DE\Reporting\...\" & SaveName & ".xlsm"


Willst Du nur die Dateien ohne Makros speichern, probier mal:

Code:
ActiveWorkbook.SaveAs "X:\2021_DE\Reporting\...\" & SaveName & ".xlsx", FileFormat:=xlOpenXMLWorkbook


Gruß,
Lutz
[-] Folgende(r) 1 Nutzer sagt Danke an Lutz Fricke für diesen Beitrag:
  • Phiant
Antworten Top
#3
Hallo Lutz,

ich möchte ohne Makros speichern, deswegen als .xlsx! Dein 2. Code funktioniert einwandfrei, vielen Dank schonmal dafür  15

Wenn ich die Datei im neuen Format abspeichern möchte, kommt die Aufforderung zu entscheiden, ob ich das wirklich will oder nicht. Mit welchem Befehl kann ich das automatisch bestätigen, dass ohne Makros abgespeichert werden soll?
Nach dem erfolgreichen abspeichern unter neuem Namen auf dem Server, möchte ich das sich das Dokument direkt selber schließt. Was muss ich dazu ergänzen?

Wunschszenario: Ich löse mein Makro aus, das speichert mir die Datei ohne zusätzliche Bestätigung & ohne Makros auf den Server, dann wird das Dokument geschlossen.

Ergänzende Frage: Kann ich über ein Makro in separatem Dokument mein "Reporting" ansteuern und eine Kopie davon, mit Datums-korrektem Namen, auf den Server speichern lassen?

Danke für die Mühe  Angel

Gruß
Phiant
Antworten Top
#4
Hallo Phiant,

speichern und schließen ohne Nachfrage:
Code:
Application.DisplayAlerts = False
Application.EnableEvents = False
ActiveWorkbook.SaveAs "X:\2021_DE\Reporting\...\" & SaveName & ".xlsx", FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close
Application.EnableEvents = True
Application.DisplayAlerts = True
Zuerst die Fehlermeldung ausschalten, dann evtl. irgendwelche nachgelagerten Events ausschalten, speichern, schließen Events wieder einschalten, Fehlermeldungen wieder einschalten.

Der Code in der Form ist allerdings nicht wirklich brauchbar, da spätestens mit der Zeile ActiveWorkbook.Close der Code weg ist und die letzten Zeilen werden nicht ausgeführt werden.
Also in irgendeiner Weise brauchst Du den Code außerhalb des Reportings.

Ich arbeite üblicherweise mit einer Datei, die den Code und Hilfsdaten enthält. Die Reportingdatei ist immer eine .xlsx-Datei. Damit kann ich das Reporting öffnen, speichern, schließen etc. ohne dass ich Code-Probleme bekomme.
Das ist wahrscheinlich, was du mit der letzten Frage meinst, oder? Am Besten Du postest mal ne Beispieldatei und den Code.

Gruß,
Lutz
[-] Folgende(r) 1 Nutzer sagt Danke an Lutz Fricke für diesen Beitrag:
  • Phiant
Antworten Top
#5
Zitat:Ich arbeite üblicherweise mit einer Datei, die den Code und Hilfsdaten enthält. Die Reportingdatei ist immer eine .xlsx-Datei. Damit kann ich das Reporting öffnen, speichern, schließen etc. ohne dass ich Code-Probleme bekomme.

Das ist wahrscheinlich, was du mit der letzten Frage meinst, oder? Am Besten Du postest mal ne Beispieldatei und den Code.
Genau DAS möchte ich am liebsten auch so  100 ! Gar keinen Code ins Reporting und dafür nur eine eigene Datei verwenden. 


Ich habe mal angehängt wie das aussehen könnte, aber vielleicht ist dein Design da schon leichter zum adaptieren?!

.xlsx   Test Server und Mail.xlsx (Größe: 19,2 KB / Downloads: 1)
Was das Thema "Mailversand" angeht, habe ich bereits den Code in einer anderen Datei und würde den entsprechend übertragen. Deswegen sind in meiner Beispieldatei keine Codes enthalten und auch nur für den oberen Teil (Wöchentliche Serversicherung) nötig.
Antworten Top
#6
Hallo Lutz,

mit deinen Infos hab ich mir den nötigen Code selbst zusammensuchen können :)

Das kann man wahrscheinlich schöner/aufgeräumter programmieren, aber es funktioniert wie es soll! Vielen Dank nochmal für deine Unterstützung.

Anbei der "fertige" Code:
E4 enthält das Datum Rückwärts
A9 & A10 enthalten den aktuellen Datei-Namen unter dem auf den Server gesichert wird.
Ich habe das Speichern noch mit dem Schließen in ein eigenes Makro verknüpft, welches über einen Button ausgelöst wird (das kann man wahrscheinlich leichter in ein Makro schreiben...)
Code:
Sub Reporting_öffnen()
Workbooks.Open "C:\Users\...Reporting_2021_PhiAnt.xlsx"
End Sub
Sub Reporting_Ablegen()
    Dim SaveName2 As String
    SaveName2 = ActiveSheet.Range("A9").Text
    Workbooks("Reporting_2021_PhiAnt.xlsx").SaveAs "X:\2021_DE\Reporting\Ant\" & SaveName2 & ".xlsx"
End Sub
Sub Reporting_schliessen()
Dim Zusatz As String
Zusatz = ActiveSheet.Range("E4").Text
Workbooks("Reporting_2021_PhiAnt " & Zusatz & ".xlsx").Close savechanges:=False
End Sub
Sub Reporting_ablegen_schliessen()
    Reporting_Ablegen
    Reporting_schliessen
End Sub


Sub Routenplanung_öffnen()
Workbooks.Open "C:\Users\...\Routenplanung_2021_PhiAnt.xlsx"
End Sub
Sub Routenplanung_Ablegen()
    Dim SaveName3 As String
    SaveName3 = "Routenplanung_2021_PhiAnt " & ActiveSheet.Range("E4").Text
    Workbooks("Routenplanung_2021_PhiAnt.xlsx").SaveAs "X:\2021_DE\Routenplanung\Ant\" & SaveName3 & ".xlsx"
End Sub
Sub Routenplanung_schliessen()
Dim Zusatz As String
Zusatz = ActiveSheet.Range("E4").Text
Workbooks("Routenplanung_2021_PhiAnt " & Zusatz & ".xlsx").Close savechanges:=False
End Sub
Sub Routenplanung_ablegen_schliessen()
    Routenplanung_Ablegen
    Routenplanung_schliessen
End Sub


Sub Online_Übersicht_öffnen()
Workbooks.Open "C:\Users\...\Übersicht Online gesamt.xlsx"
End Sub
Sub Online_Übersicht_Ablegen()
    Dim SaveName As String
    SaveName = ActiveSheet.Range("A10").Text
    Workbooks("Übersicht Online gesamt.xlsx").SaveAs "X:\2021_DE\Webinare\Übersicht Online\" & SaveName & ".xlsx"
End Sub
Sub Online_Übersicht_schliessen()
Dim Zusatz As String
Zusatz = ActiveSheet.Range("E4").Text
Workbooks("Übersicht Online gesamt " & Zusatz & ".xlsx").Close savechanges:=False
End Sub
Sub Online_Übersicht_ablegen_schliessen()
    Online_Übersicht_Ablegen
    Online_Übersicht_schliessen
End Sub

Für den Mailversand habe ich meinen bisherigen Code nutzen können und es funktioniert einwandfrei.

Gruß,
Phiant
Antworten Top
#7
Hallo Phiant,

nachdem Du für alles eigene Knöpfchen hast, geht's für mich nicht besser. Schaut gut aus. Bin aber auch kein Profi...

Ungeschickt finde ich die Sache mit dem Datum.
Schreibe doch das Datum ganz normal in Zelle E4 und mache mit
Code:
DatumSpeicher = Format(Cells(4, 5), "YYYYMMDD")
oder
DatumSpeicher = Format(Cells(4, 5), "YYYY-MM-DD")
das Speicherdatum draus.

Gruß,
Lutz
[-] Folgende(r) 1 Nutzer sagt Danke an Lutz Fricke für diesen Beitrag:
  • Phiant
Antworten Top
#8
Ich habe auch einen "All in One" Knopf ausprobiert, der erst den öffnen-Code, dann den ablegen-Code, den schließen-Code und zuletzt den Mailversand-Code auslöst.
Dabei kam immer eine Fehlermeldung, dass für _workbooks save as nicht ausgeführt werden konnte  Huh Ist bei mir jetzt auch nicht zwingend anders nötig.
Das mit dem Datum probiere ich noch aus, schaut auch irgendwie unnötig aus, das Datum in 2 Formatierungen dastehen zu haben.

Gruß,
Phiant
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste