Anzeige
Archiv - Navigation
1100to1104
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
Inhaltsverzeichnis

Code verkürzen

Code verkürzen
Stefanglander
Hallo Forum,
ich habe eine Sub die wie folgt aussieht:
Private Sub Alle_ausblenden()
Tabelle53.Visible = False
Tabelle52.Visible = False
Tabelle51.Visible = False
End Sub
Eigentlich geht das noch bis Tabelle2 weiter.
Nun meine Fragen
Gibt es die Möglichkeit dieses Anweisung kürzer zu schreiben
und
kann ich diese Sub in ein Modul legen, so das aus allen Tabellenblättern darauf zugegriffen werden kann?
Lieben Gruss
Stefan

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Code verkürzen
15.09.2009 12:31:23
Rudi
Hallo,
Schleife? 1 muss sichtbar bleiben.
Sub FastAlleAusblenden
dim i as integer
for i=2 to worksheets.count
Worksheets(i).visible=false
Next
End Sub

In Modul: Klar.
Gruß
Rudi
Danke Dir! :-)) (o.T.)
15.09.2009 13:05:26
Stefanglander
.
AW: Danke Dir! :-)) (o.T.)
15.09.2009 13:47:35
Luschi
Hallo Stefan,
diese Lösung kann nicht dem entsprechen, was Du vorhast.
Tabelle2.Visible = False
entspricht nicht immer
Worksheets(2).Visible = False
Tabelle2 ist hart kodiert und egal an welcher Stelle im Tab-Reiter diese Tabelle auftaucht (und auch unter welchem Namen) wird genau diese Tabelle angesprochen.
Worksheets(2) dagegen entpricht genau der Position im Tab-Register. Wenn also diese Tabelle2 im Register verschoben wird, dann wird mit Tabelle2 immer noch die gleiche Tabelle angesprochen, Worksheets(2). dagegen verweist auf eine ganz andere Tabelle (2. Position im Tab-Register).
Ich finde Deine Idee, im Vba-Code den Tabellenzugriff unabhängig vom Namen der Tabelle zu gestalten, ist nicht daß NON PLUS ULTRA in der Datenzugriffsmethode auf Tabellen. Wenn einmal die Struktur des Tabellenaufbaus erarbeitet ist, sind lapidare Schönheitsoperationen wie Veränderung des Tabellennamens im Tab-Register abzulehnen.
Zudem ist diese Idee zum Scheitern verurteilt, wenn man 2 oder mehrere xls.Dateien gleichzeitig im Zugriff hat, um Daten in anderen Arbeitsmappen zu suchen und eventuelle zu korrigieren.
Gruß von Luschi
aus klein-Paris
Anzeige
woher weißt du ...
15.09.2009 14:06:56
Rudi
was er vor hat?
diese Lösung kann nicht dem entsprechen, was Du vorhast.
Gruß
Rudi
AW: woher weißt du ...
15.09.2009 14:14:21
Luschi
Hallo Rudi,
siehe hier: https://www.herber.de/forum/messages/1102880.html
Es sollen Tabellenblätter in Vba angesprochen werden, auch wenn sie umbenannt werden bzw. die Index-Position wechseln.
Gruß von Luschi
aus klein-Paris
aha! Dann ...
15.09.2009 14:18:46
Rudi
wohl eher so:
Sub ausblenden()
Dim wks As Worksheet
For Each wks In Worksheets
wks.Visible = wks.CodeName = "Tabelle1"
Next
End Sub

Gruß
Rudi
Anzeige
ausblenden mit einem schlag
15.09.2009 18:02:40
Tino
Hallo,
so kannst Du alle Tabellen in einem Array sammeln und mit einem schlag ausblenden.
Sub Beispiel()
Dim ArraySh() As String
Dim meSh As Object, ii As Integer

'Alle Tabellen sammeln die nicht den Namen Tabelle1 haben 
'hier wird der Objektname verwendent, daher die Tabelle auch umbenannt werden. 
'zu finden im VBA in der Explorerleiste, der Name auserhalb der Klammer 
    
    For Each meSh In ThisWorkbook.Sheets
        If meSh.CodeName.Name <> "Tabelle1" Then
         Redim Preserve ArraySh(ii)
         ArraySh(ii) = meSh.Name
         ii = ii + 1
        End If
    Next meSh

    Tabelle1.Visible = True 'eine muss Sichtbar sein!! 
    Sheets(ArraySh).Visible = xlSheetVeryHidden  'alle auf ein mal ausblenden 

End Sub
Gruß Tino
Anzeige
Leider geht das nur mit AUSblenden...
15.09.2009 18:25:10
NoNet
Hey Tino, hallo Stefan,
Als Ergänzung : kürzlich gab's hier im Forum eine Frage (wahrscheinlich wusstest Du das schon ;-), wie man Tabellenblätter "auf einen Schlag" EINblenden kann - das ist leider mit dieser ARRAY-Methode nicht möglich, hier muss man diese einzeln einblenden....
Gruß, NoNet
stimmt und ...
15.09.2009 19:07:50
Tino
Hallo,
ja genau so ist es, in meinem Beispiel muss aber noch korrigiert werden.
es geht nicht mit
Sheets(ArraySh).Visible = xlSheetVeryHidden
sondern nur mit
Sheets(ArraySh).Visible = False
Also nochmal den Code richtig zum ein und ausblenden
Sub VisibleSheets(TabEin As Boolean)
Dim ArraySh() As String
Dim meSh As Object, ii As Integer
    

    For Each meSh In ThisWorkbook.Sheets
        If meSh.CodeName <> "Tabelle1" And meSh.Visible = Not TabEin Then
            Redim Preserve ArraySh(ii)
            ArraySh(ii) = meSh.Name
            ii = ii + 1
        End If
    Next meSh
  
  
   Tabelle1.Visible = True 'eine muss Sichtbar sein!! 
   
   If TabEin And ii > 0 Then
     Application.ScreenUpdating = False
        For ii = Lbound(ArraySh) To Ubound(ArraySh)
         Sheets(ArraySh(ii)).Visible = True
        Next ii
     Application.ScreenUpdating = True
   ElseIf ii > 0 Then
        Sheets(ArraySh).Visible = False   'alle auf ein mal ausblenden 
   End If

End Sub

Sub BeispielAusblenden()
 VisibleSheets False
End Sub

Sub BeispielEinblenden()
 VisibleSheets True
End Sub
Gruß Tino
Anzeige
Danke nochmals Allen
16.09.2009 17:10:06
Stefanglander
Ich kann nur sagen danke danke danke, das haut einwandfrie hin
Gruß
Stefan

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige