Clever-Excel-Forum

Normale Version: Application.Displayalerts in anderer Mappe
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
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
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
Hallo Tim,

(16.04.2019, 15:34)EasY schrieb: [ -> ]Ich habe deshalb am Anfang des Makros Application.Displayalerts = False geschrieben.

warum am Anfang?

Gruß Uwe
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.
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
Hi Ralf,

(16.04.2019, 17:29)RPP63 schrieb: [ -> ]Application.DisplayAlerts stellt sich automatisch beim Verlassen des Makros wieder auf True

w.z.b.w. Wink
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
Ja, nachdem ich meine unausgegorene Antwort überdacht habe, war es zu spät. Wink
War eine flüchtige Eingebung, die n.b.w.m. (nicht bewiesen werden muss)  Blush

Gruß Ralf
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)
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.
Hi,

(16.04.2019, 18: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
Seiten: 1 2