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.

[VBA] Arbeitsblatt Speichern unter..
#1
Hi zusammen,

kann mir jemand erklären weshalb folgender Code einwandfrei funktioniert:

Code:
Sub kopieren()
On Error GoTo Fehlerbehandlung
Dim strName As String
Dim Path As String
strName = Worksheets("PickUp").Range("F1").Value
Path = ThisWorkbook.Path
Application.DisplayAlerts = False
With Worksheets("PickUp")
.Copy
.UsedRange
ActiveWorkbook.SaveAs Path & "\" & strName & " " & Format(Date, "DD-MM-YYYY") & ".xlsx", FileFormat:=xlOpenXMLWorkbook
End With
Application.DisplayAlerts = True
Fehlerbehandlung:
Exit Sub
End Sub

.. Wenn ich aber mehrere Arbeitsblätter auswähle, er die Blätter zwar kopiert, jedoch die neue Mappe nicht mehr speichert?! (und demnach auch keinen Dateinamen vergibt)

Code:
Sub kopieren()
On Error GoTo Fehlerbehandlung
Dim strName As String
Dim Path As String
strName = Worksheets("PickUp").Range("F1").Value
Path = ThisWorkbook.Path
Application.DisplayAlerts = False
With Worksheets(Array("PickUp", "Auswertung"))
.Copy
.UsedRange
'Cells.Value = Cells.Value
ActiveWorkbook.SaveAs Path & "\" & strName & " " & Format(Date, "DD-MM-YYYY") & ".xlsx", FileFormat:=xlOpenXMLWorkbook
End With
Application.DisplayAlerts = True
Fehlerbehandlung:
Exit Sub
End Sub

Im Prinzip ändere ich doch nur 'with Worksheets("PickUp")' zu 'with Worksheets(Array...'
Huh

VG
Antworten Top
#2
Moin!
Nicht alles was "einwandfrei funktioniert", muss ja auch sinnvoll sein.  :21:
Mal ein paar Anmerkungen zum ersten Code:
Du kopierst ein einzelnes Blatt in eine neue Datei und speicherst die neue Mappe ab.
  1. Warum UsedRange? Was soll Excel denn sonst speichern, vor allem: was soll das überhaupt innerhalb der With bewirken? Lasse den mal weg, dies dürfte auch den Fehler in Makro2 auslösen.
  2. Warum schaltest Du die DisplayAlerts aus? Immerhin würde Dir dies eine Möglichkeit der Fehlersuche belassen!
Merke: Eine Fehlerbehandlung sowie Ausschalten der Alerts macht erst dann Sinn, wenn Du ein Makro getestet hast und alle Dir bekannten(!) Fehler ausschließen kannst!
Alerts schaltet man im Übrigen nur dann aus, wenn man bewusst(!) eine erwartete(!) Meldung nicht anzeigen will!
Als Beispiel die bekannte Meldung, wenn man ein Blatt löschen lässt.

Außerdem ist ein Exit Sub als Fehler-Sprungziel nicht gerade aussagekräftig!
(und als letzte Anweisung vor End Sub mit Verlaub Schwachsinn (netter gesagt: schlicht redundant))
Werte das Err-Objekt aus, dann weisst Du wenigstens, was schiefgelaufen ist.
Schaue Dir das zweite Code-Beispiel an:
https://www.online-excel.de/excel/singsel_vba.php?f=145

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
Guten Morgen Ralf,

vielen Dank für deine Hifle! Top!

Gruss Jules
Antworten Top
#4
Danke!
Ich habe grad mal Code geschrieben, wie ich ihn mir vorstelle:

Sub Copy_RPP()
Dim strName$
strName = Worksheets("PickUp").Range("F1").Value

On Error GoTo WattNu
Worksheets(Array("PickUp", "Auswertung")).Copy
ActiveWorkbook.SaveAs _
  ThisWorkbook.Path & "\" & strName & " " & Format(Date, "yyyy-mm-dd"), _
    FileFormat:=51
Exit Sub

WattNu:
MsgBox "Du ging etwas schief!" & vbNewLine & _
  "Fehler Nummer: " & Err.Number & vbNewLine & _
  Err.Description
End Sub

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#5
Hi Ralf,

(16.08.2018, 07:23)RPP63 schrieb: Ich habe grad mal Code geschrieben, wie ich ihn mir vorstelle:

und, läuft der Code fehlerfrei durch? :17:

Gruß Uwe
Antworten Top
#6
Sehr schön! Ich danke Dir!

Achso: DisplayAlert hatte ich aus, weil er mir sonst jedesmal vorher meldet, dass "die folgenden Features in Arbeitsmappen ohne Makro nicht gespeichert werden können". Da muss ich dann jedesmal auf "Ja" klicken, um die Mappe ohne Makros zu speichern.

Schalte ich die AlertMessages aus, verschwindet eben auch die Frage Wink
Antworten Top
#7
(16.08.2018, 07:47)Kuwer schrieb: und, läuft der Code fehlerfrei durch?  :17:

Moin Uwe!

Bei mir ja!
Warum sollte er nicht?

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#8
Hi Ralf,

ich hatte es gestern Abend getestet, da lief schon .Copy in den Debugger (Fehlerbehandlung ausgeschaltet). Nach einer Weile Rödeln schmierte Excel dann komplett ab. Dies war reproduzierbar. Allerdings hatte ich .Copy im With-Rahmen stehen.  Huh

Gruß Uwe
Antworten Top
#9
Hallöchen,

bei mir läufts, auer, ich hab die Datei noch nie gespeichert. Das betrifft dann aber .Save und nicht .Copy weil in dem Fall der Pfad fehlt.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


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