101 Aufrufe
Gefragt in Tabellenkalkulation von jelena Mitglied (829 Punkte)
Bearbeitet von jelena

Hallo guten Tag, ich habe 10 Tabellenblätter und es soll nach ausführen dieses makros wieder zur Ursprunges Tabelle zurückkehren. Mit ActiveSheet.Select wird die das Tabellenblatt 9 und mit Tabelle1.Select wird das Tabellenblatt 1 ausgewählt. Es soll aber das Tabellenblatt ausgewählt werden wo ich das makro ausgeführt habe z.B. Tabellenblatt 5. Nachstehend mein makro. Dieses makro befindet sich in DieseArbeitsmappe. Bitte um Richtigstellung. Danke

Public Sub Reset_Autofilter()     'Mit schaltknopf in allen Tabellen Filter ÖFFNEN
    Application.ScreenUpdating = False      ' Bildschirnaktualisierung aus
    For Each WsTabelle In Sheets
        WsTabelle.Unprotect ("gs")
    Next WsTabelle

Dim wksSheet As Worksheet   'alle filter öffnen
    For Each wksSheet In ThisWorkbook.Worksheets
        If wksSheet.FilterMode Then
            wksSheet.ShowAllData
        End If
    Next wksSheet

     Dim Blatt As Worksheet 'Blattschutz ein für alle Tabellen
      For Each Blatt In Worksheets
        Blatt.Protect Password:="gs", DrawingObjects:=True, Contents:=True, Scenarios:=False, AllowSorting:=True, _
        AllowFiltering:=True
      Next Blatt
  Application.ScreenUpdating = True

'ActiveSheet.Select
Tabelle1.Select

    Application.ScreenUpdating = True       ' Bildschirmaktalisierung ein
End Sub

3 Antworten

0 Punkte
Beantwortet von vbastler Mitglied (325 Punkte)
Bearbeitet von vbastler

Hallo Jelena,

relativ einfache Lösung: Schreib am  Anfang Deines Makros sActive = ActiveSheet.Name und am Ende Sheets(sActive).Activate. sActive definierst Du als String.

Das ScreenUpdating=True brauchst Du auch nur einmal.

Option Explicit

Sub Test()
Dim sActive As String, wb As Workbook, sht As Worksheet
Set wb = ThisWorkbook
sActive = ActiveSheet.Name
'ab hier Dein Makro
For Each sht In wb.Sheets
    Debug.Print sht.Name
Next sht
Sheets(wb.Worksheets.Count).Activate
MsgBox sActive
'hier endet Dein Makro
Sheets(sActive).Activate
End Sub

Grüße

d'r Bastler von den VBAsteleien.de

0 Punkte
Beantwortet von vbastler Mitglied (325 Punkte)

Moin Jelena,

eben habe ich mir Deinen Code noch einmal angeschaut und musste feststellen, dass da so Einiges vereinfacht werden kann. VBA scheint nicht Deine Muttersprache zu sein ;-) 

Weder brauchst Du für die Aufgabe drei Schleifen, noch muss für jede Schleife eine neue Variable definiert werden. Der folgende Code gehört in Allgemeines Modul (Im VB-Editor ganz links oben mit der rechten Maustaste Einfügen > Modul) und kann über Alt+F8 bequem aufgerufen werden. Deinen bisherigen Code bitte komplett mit führenden Hochkommata auskommentieren.

Option Explicit                         'zwingt zur Deklaration der Variablen WICHTIG! für die Fehlersuche

Public Sub Reset_Autofilter()           'die Deklaration setzt man alle hier zu Anfang, dadurch behält man den Überblick
Dim wb As Workbook, sht As Worksheet, sActive As String
Set wb = ThisWorkbook: Set sht = ActiveSheet

sActive = sht.Name                      'aktives Sheet merken
Application.ScreenUpdating = False      'Geflacker aus

For Each sht In wb.Sheets               'nun EINE schleife durch alle Sheets
    sht.Unprotect ("gs")                'Schutz abschalten
    If sht.FilterMode Then              'Filter konfigurieren
        sht.ShowAllData
    End If                              'Schutz wieder einschalten
    sht.Protect Password:="gs", DrawingObjects:=True, Contents:=True, Scenarios:=False, AllowSorting:=True, AllowFiltering:=True
Next sht                                'nächstes Sheet

wb.Sheets(sActive).Activate             'Dein erstes Sheet wieder aktivieren
Application.ScreenUpdating = True       'Geflacker an
End Sub

Falls noch Fragen sind - her damit! Grüße

d'r Bastler von den VBAsteleien.de

0 Punkte
Beantwortet von jelena Mitglied (829 Punkte)
Hallo d'r Bastler von den VBAsteleien.de vielen Dank.
...