Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1600to1604
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

Einblenden der Reiter als Schleife

Einblenden der Reiter als Schleife
15.01.2018 08:59:52
Hans-Jürgen
Hallo Wissende,
ich betreue ein Excel-Projekt mit VBA-Makros im Freigabemodus. Es sind darin vertrauliche Daten enthalten, die nicht jeder sehen darf, der auch Zugriff auf die Datei hat. Aus diesem Grund werden mittels Event beim Schließen alle Reiter mit "veryhidden" ausgeblendet und nur ein Dummy-Sheet (SL) eingeblendet.
Öffnet man die Datei, wird über Workbook-Open der aktuelle Anwender abgefragt. Die berechtigten Mitarbeiter sind in einer entsprechenden Tabelle namentlich eingepflegt, dazu noch eine Berechtigungsstufe als Buchstabe. Nach Feststellen der Berechtigungsstufe werden die Sheets eingebledet.
Bisher habe ich das so gelöst:

  • Select Case Berechtigungsstufe Case "G": Sheets(SG).Visible = xlSheetVisible Sheets(SB).Visible = xlSheetVisible Sheets(SM).Visible = xlSheetVisible Sheets(SH).Visible = xlSheetVisible Sheets(SA).Visible = xlSheetVisible Sheets(SP).Visible = xlSheetVisible Sheets(SJ).Visible = xlSheetVisible Sheets(SV).Visible = xlSheetVisible Sheets(SE).Visible = xlSheetVisible Sheets(SL).Visible = xlSheetHidden Case "K": Sheets(SH).Visible = xlSheetVisible Sheets(SA).Visible = xlSheetVisible Sheets(SP).Visible = xlSheetVisible Sheets(SJ).Visible = xlSheetVisible Sheets(SV).Visible = xlSheetVisible Sheets(SE).Visible = xlSheetVisible Sheets(SL).Visible = xlSheetHidden Case "Q": Sheets(SP).Visible = xlSheetVisible Sheets(SV).Visible = xlSheetVisible Sheets(SE).Visible = xlSheetVisible Sheets(SL).Visible = xlSheetHidden Case "E": Sheets(SE).Visible = xlSheetVisible Sheets(SL).Visible = xlSheetHidden Case Else Err.Raise vbObjectError + 114 End Select

  • Das klappt, aber ist wahrscheinlich nicht die höhere Schule. Ich will diese Ecke neu machen, weil ich sowieso Bedarf habe: Beim Start will ich nämlich auch bei allen sichtbaren Seiten das Kommando
    Sheets(xy).Protect UserInterfaceOnly:=True
    geben, was ich ganz reivoll finde. (Die Bereiche, die der Benutzer betreten darf, werden inhaltlich über Change-Events abgesichert. Trotzdem war es bisher möglich, mit einer destruktiven Ader die Beschriftungsbereiche/Formatierungen zu zerstören, aber das nur nebenbei)
    Jedenfalls denke ich an eine "For Each WorkSheet in Workbook-Schleife", mit der man zum einen das Protect macht, und zum anderen vorher auch noch das Einblenden der Reiter.
    Könnte man nicht vorher eine Aufzählung machen wie z.B.
    RechtG = "SG,SB,SM,SH,SA,SP,SJ,SV,SE"
    RechtK = "SH,SA,SP,SJ,SV,SE"
    und so weiter, und dann in der For-Each-Schleife diesen Reiter einblenden, wenn der Seitenname in der entsprechenden Auflistung vorkommt?
    Da fehlt mir allerdings die Phantasie, das zusammenzuschrauben und bitte um einen kurzen Wink, vielen Dank im voraus
    Hans-Jürgen

    3
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Einblenden der Reiter als Schleife
    15.01.2018 09:35:26
    ChrisL
    Hi Hans-Jürgen
    Sinngemäss...
    Sub t()
    Dim i As Integer, strRechte As String, ar As Variant
    strRechte = "SG,SB,SM,SH,SA,SP,SJ,SV,SE"
    ar = Split(strRechte, ",")
    For i = LBound(ar) To UBound(ar)
    Sheets(ar(i)).Visible = xlSheetVisible
    Next i
    End Sub
    

    SG, SB etc. sind hier Text-Strings und keine Variablen.
    cu
    Chris
    AW: Einblenden der Reiter als Schleife
    15.01.2018 09:37:15
    Daniel
    Hi
    würde ich so machen:
    1. lege auf einem weiteren Tabellenblatt eine Tabelle an, in welcher du in Spalte A die Blattnamen auflistest und in Spalte B daneben die Berechtigungsstufen, bei denen dieses Blatt eingeblendet werden soll:
    Tabelle1 | GK
    Tabelle2 | QEK
    usw

    Annahme der Blattname sei "Berechtigungen"
    2. die Schleife würde dann so aussehen
    zunächst wird der Blattname in der Liste gesucht. ist er nicht aufgelistet, wird das Blatt ausgeblendet.
    ansonsten wird geprüft, ob die aktuelle Berechtigungsstufe in der daneben liegenden Zelle vorhanden ist und ggf das Blatt eingeblendet.
    dim sh as Worksheet
    dim Zelle as range
    For each sh in thisworkbook.Worksheets
    set Zelle Sheets("Berechtigungen").Find(what:=sh.Name, lookat:=xlwhole)
    if Zelle is Nothing then
    sh.visible = xlsheetveryhidden
    else
    if Instr(Zelle.Offset(0, 1), Berechtigungsstufe) > 0 Then
    sh.Visible = xlsheetvisible
    else
    sh.Visible = xlsheetveryhidden
    end if
    end if
    next
    
    das Blatt mit den Berechtiungenn sollte natürlich immer ausgeblendet sein
    Gruß Daniel
    Anzeige
    AW: Einblenden der Reiter als Schleife
    15.01.2018 09:42:37
    Sepp
    Hallo Hans-Jürgen,
    da gibt es viele Möglichkeiten.
    Z.B.:
    ' **********************************************************************
    ' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
    ' **********************************************************************

    Option Explicit

    Private Sub Workbook_Open()
    Dim objCol As Collection
    Dim varItem As Variant
    Dim Berechtigungsstufe As String

    Set objCol = New Collection

    Berechtigungsstufe = "G" 'Beispiel

    '------------Array mit den Tabellennamen , Berechtigungsstufe
    objCol.Add Array("SG", "SB", "SM", "SH", "SA", "SP", "SJ", "SV", "SE"), "G"
    objCol.Add Array("SH", "SA", "SP", "SJ", "SV", "SE"), "K"

    If Exists(objCol, Berechtigungsstufe) Then
      For Each varItem In objCol(Berechtigungsstufe)
        With Sheets(varItem)
          .Protect Password:="password", UserInterfaceOnly:=True
          .Visible = xlSheetVisible
        End With
      Next
    End If
    End Sub


    Private Function Exists(coll As Collection, key As String) As Boolean
    On Error GoTo EH
    coll.Item key
    Exists = True
    EH:
    End Function

    Gruß Sepp

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige