Registriert seit: 28.05.2017
Version(en): 365
Hi Leute,
ich habe ein längeres Makro geschrieben, bei dem zunächst eine Kopie der Datei erstellt wird. Anschließend wird diese Kopie geöffnet und es werden dann von der Kopie nicht benötigte Blätter (52 Stück) gelöscht.
Nun stört mich, dass das Makro an diesem Punkt 52 Mal von mir fordert, das Löschen zu bestätigen. Ich habe deshalb am Anfang des Makros Application.Displayalerts = False geschrieben. Leider scheint diese Code-Zeile nicht für die neu generierte Mappe zu gelten - die Aufforderung, das Blattlöschen zu bestätigen kommt trotzdem.
Habe ihr eine Idee, wie ich das lösen kann?
Gruß Tim
Registriert seit: 28.05.2017
Version(en): 365
16.04.2019, 16:40
(Dieser Beitrag wurde zuletzt bearbeitet: 16.04.2019, 16:43 von EasY.)
Achso, falls das hilft:
Code:
Sub NeueMappe_Loeschen()
Dim strPfad As String
Dim wks As Worksheet
Dim Dateiname_neu As String
Dim Dateiname_alt As String
Dim i As Integer
strPfad = ActiveWorkbook.Path
Dateiname_neu = "Test " & ThisWorkbook.Sheets("Einstellungen_neu").Range("O12").Value
Dateiname_alt = ThisWorkbook.Name
Application.DisplayAlerts = False
'Aktuelle Mappe speichern und dann eine Kopie mit neuem Namen erstellen
Call speichern
With ThisWorkbook
.SaveCopyAs Filename:=strPfad & "\" & Dateiname_neu & ".xlsm"
End With
'Neue Mappe öffnen und alle Blätter bis auf ___ löschen
Workbooks.Open Filename:=strPfad & "\" & Dateiname_neu & ".xlsm"
For Each wks In Workbooks(Dateiname_neu).Sheets
If LCase(wks.Name) <> "einstellungen_neu" And _
LCase(wks.Name) <> "mitarbeiter" And _
LCase(wks.Name) <> "berechnungshilfe" And _
LCase(wks.Name) <> "zwischenspeicher" And _
LCase(wks.Name) <> "mitarbeiterliste" Then wks.Delete
Next
Application.DisplayAlerts = True
End sub
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Tim,
(16.04.2019, 16:34)EasY schrieb: Ich habe deshalb am Anfang des Makros Application.Displayalerts = False geschrieben.
warum am Anfang?
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• EasY
Registriert seit: 28.05.2017
Version(en): 365
Nach vielen Versuchen dürfte ich des Rätsels Lösung gefunden haben: Ich habe vor dem Löschen der Blätter das Workbook zunächst aktiviert und dann den Application.Displayalerts = false - Befehl erneut eingegeben.
Weiß jemand wie ich prüfen kann, ob die Displayalerts aktiviert oder deaktiviert sind? Nicht, dass nun bei der alten Datei die Alerts ausgeschaltet bleiben.
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Moin!
Mit Call speichern verlässt Du das Makro temporär.
Application.DisplayAlerts stellt sich automatisch beim Verlassen des Makros wieder auf True
Richtiger wäre also (ungetestet)
Call speichern
Application.DisplayAlerts = False
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)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
16.04.2019, 18:39
(Dieser Beitrag wurde zuletzt bearbeitet: 16.04.2019, 18:40 von Kuwer.)
Hi Ralf,
(16.04.2019, 18:29)RPP63 schrieb: Application.DisplayAlerts stellt sich automatisch beim Verlassen des Makros wieder auf True
w.z.b.w.
Sub aaa()
Application.DisplayAlerts = False
Debug.Print "a1: " & Application.DisplayAlerts
Call bbb
Debug.Print "a2: " & Application.DisplayAlerts
Application.DisplayAlerts = True
End Sub
Sub bbb()
Debug.Print "b: " & Application.DisplayAlerts
End Sub
Gruß Uwe
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Ja, nachdem ich meine unausgegorene Antwort überdacht habe, war es zu spät.
War eine flüchtige Eingebung, die n.b.w.m. (nicht bewiesen werden muss)
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)
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
16.04.2019, 18:52
(Dieser Beitrag wurde zuletzt bearbeitet: 16.04.2019, 18:52 von RPP63.)
Dennoch:
Application.DisplayAlerts muss nicht wieder auf True gestellt werden.
Dies schafft der Interpreter ganz von allein …
(dennoch macht das Wiederanstellen aus "ästhetischen" Gründen Sinn)
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)
Registriert seit: 25.04.2016
Version(en): 2013
16.04.2019, 19:38
(Dieser Beitrag wurde zuletzt bearbeitet: 16.04.2019, 19:41 von Storax.)
In der
Doku steht
Zitat:Wenn Sie diese Eigenschaft auf False festlegen, legt Excel diese Eigenschaft auf True fest,
wenn der Code abgeschlossen ist, es sei denn, Sie führen einen prozessübergreifenden Code aus.
Was ist denn
prozessübergreifender Code?
Ok, in Original ist es deutlicher
Zitat:If you set this property to False, Excel sets this property to True when the code is finished,
unless you are running cross-process code.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
16.04.2019, 20:02
(Dieser Beitrag wurde zuletzt bearbeitet: 16.04.2019, 20:06 von Kuwer.)
Hi,
(16.04.2019, 19:38)Storax schrieb: Was ist denn prozessübergreifender Code?
z.B. per OnTime ist keiner:
Sub aaa()
Application.DisplayAlerts = False
Debug.Print "a1: " & Application.DisplayAlerts
Call bbb
Debug.Print "a2: " & Application.DisplayAlerts
Application.OnTime Now + CDate("00:00:01"), "bbb"
End Sub
Sub bbb()
Debug.Print "b: " & Application.DisplayAlerts
End Sub
Gruß Uwe