2017-05-05 7 views
1

Ich möchte alle meine Filter zurücksetzen, wenn ich eine Arbeitsmappe speichere. Zur Zeit habe ich:Abrufen eines Makros beim Speichern

Sub ResetFilters() 
    On Error Resume Next 

    ActiveSheet.ShowAllData 
End Sub 


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ 
     Cancel As Boolean) 


     Dim ws As Worksheet 

     For Each ws In ActiveWorkbook.Worksheets 

      Call ResetFilters 

     Next 


    Cancel = False 
End Sub 

Die Idee ist, dass wenn ich speichere, ich alle Filter entfernen. Es funktioniert aus irgendeinem Grund nicht - hat jemand eine Idee warum?

Edit: mehr googeln fand die Antwort: Excel VBA - Run macro before save

Tl; dr: Immer Google mit dem Schlüsselwort in Stackoverflow - es dramatisch

+0

zunächst nicht verwenden On Error Resume Next, diese Linie im Grunde umgehen Fehler, die Probleme verursachen könnten. Außerdem würde ich etwas wie "Cncl" anstelle von "Abbrechen" als eine Variable verwenden, um zu vermeiden, versehentlich ein Schlüsselwort zu verwenden. Ändern Sie diese 2 und sehen Sie, was das Programm Ihnen sagt. – Alex

+0

Ich habe es - es war der Ort, wo ich das Modul gespeichert habe. Wenn Sie einen besseren Weg finden, um Filter zu entfernen, würde ich mich freuen, es zu hören - ich muss noch eine bessere Methode finden – Selkie

+0

Ich denke, dass Sie ein Problem mit Ihrer Verwendung von ActiveSheet haben werden. Sie sollten ws an ResetFilters übergeben und ws anstelle von ActiveSheet verwenden. –

Antwort

1

Ihr Programm hilft besser wie folgt geschrieben werden könnte. Ich weiß, dass Sie Ihr ursprüngliches Problem gelöst haben, aber Sie haben bemerkt, dass es Ihnen nichts ausmachen würde, die Filter zurückzusetzen. Hier ist der bessere Weg:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ 
     Cancel As Boolean) 

     Dim ws As Worksheet 
     ' Use 'ThisWorkbook' here since you only want to modify the workbook 
     ' that the code is running in 
     For Each ws In ThisWorkbook.Worksheets 
      If ws.AutoFilterMode then ws.ShowAllData 
     Next 

    Cancel = False 
End Sub 

Ein Tipp für VBA lernen, nur weil man Fehler mit On Error Resume Next tut umgehen kann bedeuten, Sie sollten. In den meisten Fällen kann ein Fehler durch eine einfache boolesche Prüfung vermieden werden. Dies verhindert, dass Sie andere potenzielle Probleme übersehen, und ist eine bessere Kodierungspraxis. Darüber hinaus werden einige Leute in SO nicht versuchen, zu helfen, wenn Sie Fehler einfach ignorieren.

+0

Ich bin mir ziemlich sicher, dass ich den Fehler auf der nächsten Seite von SO erhalten habe - Danke für die Lösung! Ich benutze dies als mein Ziel für das Zurücksetzen der Filter – Selkie

+0

Es ist möglich, aber es wäre jemand gewesen, der immer noch ihre Beine unter ihnen in VBA bekam. Sobald Sie ein starkes Gefühl für die Sprache bekommen, sollte es nur noch vereinzelte Fälle geben, in denen dies gerechtfertigt ist. Ich bin froh, dass dir das geholfen hat :). –

Verwandte Themen