Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
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
SaveAs Dialog anpassen
18.07.2022 00:54:08
BriBri
Hallo,
Unter all den VBA Kennern und Könnern kann mir sicher jemand weiterhelfen. Ich erstelle in einer Excel Mappe, in der einige Kalkulationen gemacht werden, letztendlich zwei Sheets mit den Namen "Order" und "ATP Order". Aus diesen wird dann in der Excel Mappe zwei Sheets mit den Namen Order 1 und ATP Order 1 erstellt. Die Sheets "Order 1" und "ATP Order 1" werden unter den Namen "Order" und "ATP Order" in eine neue Arbeitsmappe im selben Ordner wie die ursprüngliche Arbeitsmappe abgespeichert. Danach werden die Sheets "Order 1" und "ATP Order 1" in der ursprünglichen Arbeitsmappe gelöscht.
Das funktioniert alles gut, solange die neue Arbeitsmappe noch nicht existiert.
Existiert sie aber bereits, öffnet der SaveAs Befehl eine Dialogbox Ja (überschreiben)-Nein-Abbrechen. Bei Nein und Abbrechen wird eine Arbeitsmappe kreiert, die dann MappeZahl.xls heißt, in der das Sheet "Order" steht, aber kein Sheet "ATP Order". In der ursprünglichen Mappe stehen immer noch "Order 1" und "ATP Order 1" , da der Code ja abgebrochen wurde.
Wie kann ich mit VBA bei der Dialogbox+Nein ein neues Dialogfenster öffnen, in das ein neuer Speichername vergeben werden kann?
Wie kann ich mit VBA bei der Dialogbox+Abbrechen verhindern, dass eine neue Arbeitsmappe MappeZahl.xls aufgeht? Und wie lösche ich in diesem Fall die beiden Sheets "Order 1" und "ATP Order 1" aus der ursprünglichen Mappe?
Ich weiß, der Text ist ein wenig lang geraten, aber ich hoffe ihr könnt mir helfen.
Brigitte

Option Explicit
Sub NewWbinFolder()
'New Workbook "Customer Name_Lab Name_calc_Date" is stored in the same folder as CalcTool
Dim strName As String, WbO As Workbook, WbN As Workbook
Dim strLab As String
Dim strDesign As String
Set WbO = ThisWorkbook 'Old Workbook
Application.ScreenUpdating = False
strName = WbO.ActiveSheet.Range("B1")
strLab = WbO.ActiveSheet.Range("B2")
strDesign = "ASC.In_Design.thmx"
WbO.Sheets("Order 1").Copy
Set WbN = ActiveWorkbook 'New Workbook
With WbN.ActiveSheet.UsedRange
.Value = .Value
End With
ActiveSheet.Name = "Order"
WbN.SaveAs ThisWorkbook.Path & "\" & strName & "_" & strLab & "_calc" & Format(Date, "_YYYY_MM_DD"), 51
WbO.Sheets("ATP Order 1").Copy after:=WbN.Sheets(WbN.Sheets.Count)
WbN.ActiveSheet.Name = "ATP Order"
ActiveWorkbook.ApplyTheme ThisWorkbook.Path & "\" & strDesign & "" 'Color code taken from calculation file
WbN.Close True 'new storage
Application.DisplayAlerts = False
WbO.Sheets("Order 1").Delete
WbO.Sheets("ATP Order 1").Delete
Application.ScreenUpdating = True
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SaveAs Dialog anpassen
18.07.2022 07:55:02
Oberschlumpf
Hi Brigitte,
1. Wieso kommt...

WbO.Sheets("ATP Order 1").Copy after:=WbN.Sheets(WbN.Sheets.Count)
...nicht vor dem SaveAs-Befehl? - DANN wären doch in WPN schon beide Sheets enthalten
2. Um zu vermeiden, eine schon bestehende Datei zu überschreiben, könntest du vor dem SaveAs-Befehl z Bsp mit...

If Dir(ThisWorkbook.Path & "\" & strName & "_" & strLab & "_calc" & Format(Date, "_YYYY_MM_DD")) "" Then
SchonVorhanden = InputBox("Datei ''" & strName & "_" & strLab usw & "'' ist schon vorhanden - bitte Dateinamen ändern")
End If
...prüfen, ob Datei schon vorhanden - wenn ja, dann Inputbox mit Hinweis
3. Bevor ich dir das "reinbastel", zeig bitte mal per Upload eine Bsp-Datei mit allem, was erforderlich ist, um auch testen zu können.
Ciao
Thorsten
Anzeige
AW: SaveAs Dialog anpassen
19.07.2022 01:13:07
BriBri
Hi Thorsten,
ich hab leider am Vormittag nur einen kurzen Blick in deinen Code geworfen. Jetzt allerdings sitze ich schon wieder einige Zeit und krieg's einfach nicht hin.
Zu einer Beispieldatei bin ich auch nicht gekommen. Ich schick dir mal den veränderten Code, mit der von mir gebastelten "If then else" und deiner Abfrage auf Vorhandensein der Datei.
Ich weiß nicht, warum meine If Abfrage nicht funktioniert. Aus meiner Sicht frage ich an, ob die Datei vorhanden ist ( = "" heißt für mich: ist gleich leer), wenn WAHR, dann soll die Datei unter dem angegeben Namen gespeichert werden (inkl. der Farbpallette), falls nicht (else) soll die InputBox aufgehen.
Bloß sie geht bei mir nicht auf, sondern es wird wieder eine TabelleZahl aufgemacht.
Was mach ich falsch?
Was mir auch noch überhaupt nicht klar ist, was ich machen soll wenn, wenn auf "Abbrechen" statt Eingabe des Dateinamens geklickt wird. Wie kann ich sicher stellen, dass gar nichts passiert, auch dass keine TabelleZahl aufgemacht wird? Dafür habe ich auch im Archiv leider nichts gefunden.
Brigitte

Option Explicit
Sub NewWbinFolder()
'New Workbook "Customer Name_Lab Name_calc_Date" is stored in the same folder as CTool
Dim strName As String, WbO As Workbook, WbN As Workbook
Dim strLab As String
Dim strDesign As String
Dim SchonVorhanden As Variant
Set WbO = ThisWorkbook 'Old Workbook
Application.ScreenUpdating = False
strName = WbO.ActiveSheet.Range("B1")
strLab = WbO.ActiveSheet.Range("B2")
strDesign = "ASC.In_Design.thmx"
WbO.Sheets("Order 1").Copy
Set WbN = ActiveWorkbook 'New Workbook
With WbN.ActiveSheet.UsedRange
.Value = .Value
End With
ActiveSheet.Name = "Order"
WbO.Sheets("ATP Order 1").Copy after:=WbN.Sheets(WbN.Sheets.Count)
WbN.ActiveSheet.Name = "ATP Order"
Application.DisplayAlerts = False
WbO.Sheets("Order 1").Delete
WbO.Sheets("ATP Order 1").Delete
Application.DisplayAlerts = True
If Dir(ThisWorkbook.Path & "\" & strName & "_" & strLab & "_calc" & Format(Date, "_YYYY_MM_DD")) = "" Then
WbN.SaveAs ThisWorkbook.Path & "\" & strName & "_" & strLab & "_calc" & Format(Date, "_YYYY_MM_DD"), 51
ActiveWorkbook.ApplyTheme ThisWorkbook.Path & "\" & strDesign & "" 'Color code taken from calculation file
WbN.Close True 'new storage
Else
SchonVorhanden = InputBox("Datei ''" & strName & "_" & strLab & "_calc" & Format(Date, "_YYYY_MM_DD"), 51 & "'' ist schon vorhanden - bitte Dateinamen ändern")
WbN.SaveAs ThisWorkbook.Path & "\" & SchonVorhanden, 51
ActiveWorkbook.ApplyTheme ThisWorkbook.Path & "\" & strDesign & "" 'Color code taken from calculation file
WbN.Close True 'new storage
End If
End Sub

Anzeige
AW: SaveAs Dialog anpassen
19.07.2022 03:52:34
Oberschlumpf
Hi Brigitte,
sorry, ohne Bsp-Datei kann ich ja nicht testen.
Ciao
Thorsten
AW: SaveAs Dialog anpassen
19.07.2022 22:15:59
BriBri
Hi Thorsten,
ich habe jetzt die Beispieldatei fertig. In Module 1 sind drei Sub, im Module 2 werden alle nacheinander aufgerufen. Ich mach das dann mit einem Button.
Die .thmx Datei kann ich nicht mitschicken.
Danke, dass du Zeit hast, dir das anzusehen.
Brigitte
https://www.herber.de/bbs/user/154257.xlsm
AW: SaveAs Dialog anpassen
20.07.2022 06:04:04
Oberschlumpf
Hi Brigitte,
yes of course!
Genau so mag ich das - Bsp-Dateien!
In der Datei hab ich den Fehler sofort gesehen.
Mit If Dir(...) hast du nur geprüft, ob Dateiname(ohne Endung) schon vorhanden ist - aber der Dateiname hört ja hinter dem . nicht auf.
In der Prüfung hast du nur den Zusatz & ".xlsx" vergessen.
Hier nun die korrigierte Bsp-Version zurück, in der es nun so wie erwartet funktioniert:
https://www.herber.de/bbs/user/154258.xlsm
Ich hab deinen Code etwas angepasst.
Auf die meisten .Select kannst du verzichten.
Dein Code sieht jetzt noch etwas wüst aus, weil ich "nur" den alten Code deaktiviert + Kommentare hinzugefügt habe, wieso ich deinen alten Code wie geändert habe.
Wenn du alles verstanden hast, lösch mal alle grünen Zeilen und vergleich deinen alten mit dem neuen Code = viel weniger + übersichtlicher, oder?
Konnte ich helfen?
Ciao
Thorsten
Anzeige
AW: SaveAs Dialog anpassen
20.07.2022 18:51:06
BriBri
Hi Thorsten,
vielen Dank für deine zahlreichen Anmerkungen und deine zeit. Ich habe jetzt alles studiert (bei meinen geringen VBA Kenntnissen kann ich nicht "lesen" sagen) und kenn mich ganz gut aus. Die "Select" sind über die Makroaufzeichnung hineingekommen. Jetzt sieht es viel kompakter und übersichtlicher aus :-).
Ich hätte noch eine abschließende Frage: Wenn ich über die InputBox einen neuen Dateinamen vergebe, werde ich nach Drücken von "OK", gefragt, ob ich die Datei speichern will. Das verstehe ich nicht, da ich ja den Befehl
WbN.SaveAs ThisWorkbook.Path & "\" & SchonVorhanden, 51
WbN.close
drinnen habe.
LG Brigitte
Anzeige
AW: SaveAs Dialog anpassen
20.07.2022 19:38:45
Oberschlumpf
Hi Brigitte,
hmm?...DAS verstehe ich auch nicht.
Ich hab mit deiner Bsp-Datei mehrmals hintereinander meinen Code gestartet.
Und nur, wenn Dateiname schon vorhanden, werde ich aufgefordert, einen anderen Dateinamen einzugeben.
Wenn aber mit dem von mir angegebenen Dateiname noch keine Datei vorhanden ist, wird mit dem "neuen" Dateinamen die Datei klaglos gespeichert, die per Makro erstellte Datei geschlossen und Makro fehlerfrei beendet.
na ja, fast fehlerfrei^^ :-)
Wenn ich aufgefordert werde, einen anderen Dateinamen einzugeben, und dann z Bsp nur "test" eingebe, hatte ich vergessen, die Endung ".xls" an "Test" anzuhängen.
Zumindest den von mir gefundenen Fehler konnte ich korrigieren, hier
https://www.herber.de/bbs/user/154275.xlsm
Ach ja, in meiner letzten Antwort hatte ich vergessen zu erwähnen, dass zumindest ich diese Zeilen mit "ActiveWorkbook.ApplyTheme..." deaktivieren musste, weil ja ich die Datei unter strDesign nicht habe.
Wenn all das jetzt weiterhin an der ungewünschten "Soll speichern"-Frage nix ändert, muss der Grund irgdwo anders in deiner Originaldatei sein.
Ciao
Thorsten
Anzeige
AW: SaveAs Dialog anpassen
21.07.2022 20:55:37
BriBri
Hi Thorsten,
danke für deine Korrekturen. So passt es jetzt viel besser. Ich muss die neuen Codeteile allerdings noch genau ansehen, um mich auszukennen. Vielleicht habe ich dann noch die eine oder andere Frage, wenn ich dich nochmals belästigen darf.
ich habe übrigens wieder True bei WbN.close drangeschreiben und so wird es dann auch bei mir wieder automatisch gespeichert. Ich verstehe, was du geschreiben hast, nämlich, dass man bei SaveAs auf das True verzichten kann, aber bei mir wird es dann nicht automatisch gespeichert.
LG Brigitte
AW: SaveAs Dialog anpassen
19.07.2022 06:25:16
ralf_b
Die Antwort auf die Frage mit der Inputbox steht quasi schon im Code
z.b. if SchonVorhanden = "" then
Wenn du schon Objektvariablen nutzt, dann zieh das auch durch . Warum dann noch ActiveWorkbook?
Anzeige

95 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige