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

Pro User eine Tabellenansicht ohne Veränderungsmöglichkeit

Pro User eine Tabellenansicht ohne Veränderungsmöglichkeit
07.02.2024 15:05:03
Angelo
Guten Tag zusammen,

aktuell arbeite ich an einer Datei, in der Mitarbeiterdaten enthalten sind. Diese Datei befindet sich auf SharePoint und wird von mehreren Benutzern gleichzeitig verwendet. Es ist jedoch nicht gewünscht, dass jeder Benutzer alle Daten einsehen kann; stattdessen sollen nur bestimmte Teile eines Tabellenblatts für jeden Benutzer sichtbar sein. Mein Ansatz ist es, die Tabellenansichtsfunktion zu nutzen, indem ich für jeden Benutzer beim Öffnen der Datei eine eigene Tabellenansicht erstelle, die seinen Benutzernamen trägt.

Bis hierhin funktioniert alles wie geplant. Nun stehe ich jedoch vor folgenden Herausforderungen:

  • Wie kann ich sicherstellen, dass die Tabellenansicht nicht verändert werden kann?

  • Die Daten sind durch Autofilter ausgeblendet. Wie kann ich verhindern, dass Benutzer diese wieder einblenden können?


  • In der beigefügten Beispieldatei habe ich diesen Prozess vereinfacht dargestellt und die Tabellenansichten entsprechend erstellt. Leider habe ich bisher keinen Erfolg dabei gehabt, die gewünschten Einschränkungen umzusetzen. Ich frage mich daher, ob mein Ansatz der richtige ist und ob es überhaupt möglich ist, dies in Excel zu realisieren.

    Ich habe versucht, die Funktionen der Tabellenansicht im Menüband abzufangen und zu nutzen, um Kontrollen zu implementieren, die Änderungen überwachen. Dafür habe ich entsprechend der im Internet gefundenen Anleitungen die XML-Datei und den VBA-Code angepasst und eingefügt. Leider war dies bisher nicht erfolgreich.

    Vielleicht kann jemand hier erkennen, wo mein Ansatz falsch ist, oder mir einen Ratschlag geben, wie ich mein Ziel erreichen kann.

    Die Beispieldatei im .xlsm-Format zeigt meinen aktuellen Stand, wie ich die Tabellenansichten erstelle und versuche, die Funktion abzufangen.

    https://www.herber.de/bbs/user/166858.xlsx

    Hier ist ein Auszug aus der XML-Datei sowie dem VBA-Code in der Datei.

    xml:
    ""customUI xmlns=""">http://schemas.microsoft.com/office/2009/07/customui"">"
    ""ribbon">"
    ""tabs">"
    ""tab idMso="TabView"">"
    ""group idMso="GroupNamedSheetView" label="Sheet View"">"
    ""comboBox idMso="SheetViewComboBox" label="View:" onChange="BeispielAnsicht.xlsm!OnSheetViewComboBoxChange"/">"
    ""button idMso="KeepTemporarySheetView" label="Keep Temporary View" onAction="BeispielAnsicht.xlsm!OnKeepTemporarySheetView"/">"
    ""button idMso="ExitSheetView" label="Exit Sheet View" onAction="BeispielAnsicht.xlsm!OnExitSheetView"/">"
    ""button idMso="NewSheetView" label="New Sheet View" onAction="BeispielAnsicht.xlsm!OnNewSheetView"/">"
    ""button idMso="SheetViewOptions" label="Sheet View Options" onAction="BeispielAnsicht.xlsm!OnSheetViewOptions"/">"
    ""/group">"
    ""/tab">"
    ""/tabs">"
    ""/ribbon">"
    ""backstage onHide="BeispielAnsicht.xlsm!OnHide" onShow="BeispielAnsicht.xlsm!OnShow"">"
    ""!-- Backstage Ribbon XML --">"
    ""/backstage">"
    ""/customUI">"

    DieseArbeitsmappe:
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
    Dim Benutzer As String
    Dim WB As Workbook
    Dim WS As Worksheet
    Dim WS_Count As Integer
    Dim i As Integer
    On Error Resume Next

    Set WB = ThisWorkbook

    Benutzer = Environ("username")
    WS_Count = WB.Worksheets.Count

    For i = 1 To WS_Count

    Set WS = WB.Worksheets(i)

    With WS
    .NamedSheetViews.GetItem("Full").Activate
    .NamedSheetViews.GetItem(Benutzer).Delete
    .Range(.UsedRange.Address).Select
    .ShowAllData
    End With

    Set WS = Nothing
    Next i

    Set WB = Nothing
    End Sub



    Private Sub Workbook_Open()
    Dim Benutzer As String
    Dim WB As Workbook
    Dim WS As Worksheet
    Dim WS_Count As Integer
    Dim i As Integer
    On Error Resume Next

    Aktiv = True

    Set WB = ThisWorkbook

    Benutzer = Environ("username")
    WS_Count = WB.Worksheets.Count

    For i = 1 To WS_Count

    Set WS = WB.Worksheets(i)

    If WS.Name = "Rechte" Then
    WS.Range("A5").Value = Benutzer
    WS.Select
    Else
    With WS
    .Select
    .NamedSheetViews.GetItem("Full").Activate
    .NamedSheetViews.GetItem(Benutzer).Delete
    .NamedSheetViews.EnterTemporary
    .NamedSheetViews.GetItem("").Name = Benutzer
    .NamedSheetViews.GetItem(Benutzer).Activate
    .Range(.UsedRange.Address).Select
    .Range(.UsedRange.Address).AutoFilter Field:=1, Criteria1:="1"
    End With
    End If
    Set WS = Nothing
    Next i

    Set WB = Nothing

    Aktiv = False

    Tabelle4.Select

    End Sub



    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    SheetView_On ThisWorkbook.ActiveSheet.Name
    End Sub


    Modul1:
    Option Explicit
    
    Public Aktiv As Boolean

    Public Sub OnSheetViewComboBoxChange(control As IRibbonControl, text As String)
    MsgBox "Sheet View ComboBox geändert. Neue Auswahl: " & text, vbInformation, "Hinweis"
    SheetView_On ThisWorkbook.ActiveSheet.Name
    End Sub

    Public Sub OnKeepTemporarySheetView(control As IRibbonControl)
    MsgBox "Keep Temporary Sheet View gedrückt.", vbInformation, "Hinweis"
    SheetView_On ThisWorkbook.ActiveSheet.Name
    End Sub

    Public Sub OnExitSheetView(control As IRibbonControl)
    MsgBox "Exit Sheet View gedrückt.", vbInformation, "Hinweis"
    SheetView_On ThisWorkbook.ActiveSheet.Name
    End Sub

    Public Sub OnNewSheetView(control As IRibbonControl)
    MsgBox "New Sheet View gedrückt.", vbInformation, "Hinweis"
    SheetView_On ThisWorkbook.ActiveSheet.Name
    End Sub

    Public Sub OnSheetViewOptions(control As IRibbonControl)
    MsgBox "Sheet View Options gedrückt.", vbInformation, "Hinweis"
    SheetView_On ThisWorkbook.ActiveSheet.Name
    End Sub

    Sub OnHide(control)
    If ActiveWorkbook.Name > ThisWorkbook.Name Then Exit Sub
    MsgBox "Dateimenü geschlossen.", 64, "Hinweis"
    End Sub

    Sub OnShow(control)
    If ActiveWorkbook.Name > ThisWorkbook.Name Then Exit Sub
    MsgBox "Dateimenü aufgerufen.", 64, "Hinweis"
    End Sub

    Sub SheetView_On(TB As String)
    Dim Benutzer As String
    Dim WB As Workbook
    Dim WS As Worksheet
    Dim ActiveSheetView As String
    Dim View As NamedSheetViewCollection
    On Error Resume Next

    If Aktiv = True Then Exit Sub
    If ActiveSheet.Name = "Rechte" Then Exit Sub

    Set WB = ThisWorkbook
    Set WS = WB.Worksheets(TB)

    Set View = WS.NamedSheetViews

    ActiveSheetView = View.GetActive.Name

    Benutzer = Environ("username")

    WS.NamedSheetViews.GetItem(Benutzer).Activate
    WS.Range(WS.UsedRange.Address).Select
    WS.Range(WS.UsedRange.Address).AutoFilter Field:=1, Criteria1:="1"

    Set View = Nothing

    End Sub




    Danke für eure Hilfe!!

    5
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: hohgeladen ist eine XLSM-Datei, keine XLSX-Datei owT
    07.02.2024 15:10:20
    neopa C
    Gruß Werner
    .. , - ...
    AW: so wie Du es bisher beschrieben hast, ...
    07.02.2024 15:27:51
    neopa C
    Hallo Angelo,

    ... sollen die einzelnen Bearbeiter immer nur Daten einsehen können und zwar nur die für Sie freigegebenen. So richtig?
    Eine gänzlich andere Realisierungsmöglichkeit als die von Dir bisher angestrebte wäre z.B. die, daß jede Person nur seine eigene Datei freigegeben bekommt und in dieser bei deren Öffnung nur die Daten aus Deiner Gesamtdatei bereitgestellt bekommt. Das kannst Du mit VBA lösen oder mit PQ (Power Query) wie ich es machen würde. Damit wäre auch gleichzeitig gesichert, das niemand von diesen direkten Zugriff auf die Originaldatei hat.

    Gruß Werner
    .. , - ...
    Anzeige
    AW: so wie Du es bisher beschrieben hast, ...
    07.02.2024 15:41:28
    Angelo
    Es ist mir bewusst, dass es ohne Probleme funktionieren würde, wenn jeder seine eigene Datei hätte. Gewünscht ist jedoch nur eine einzige Datei, wenn möglich. Sollte ich keine andere Möglichkeit finden, werde ich höchstwahrscheinlich auf diese Weise vorgehen müssen.
    AW: nach nun fast 6 Tagen thread wohl nicht mehr offen owT
    13.02.2024 13:56:47
    neopa C
    Gruß Werner
    .. , - ...
    AW: Pro User eine Tabellenansicht ohne Veränderungsmöglichkeit
    07.02.2024 15:36:34
    schauan
    Hallöchen,

    in den Wolken kannst Du kein VBA ausführen. Wenn jemand die Datei z.B. mit der Webanwendung von Excel öffnet, kann er alles machen, was ihm da erlaubt ist.
    Du müsstest schauen, ob Du da was mit "Benutzer dürfen Bereiche bearbeiten" regulieren kannst.
    Eventuell musst Du die Daten auf verschiedenen Blättern oder in verschiedenen Dateien unterbringen und für die, die mehr brauchen, die Daten dann zusammenfassen. Hätte aber auch den Nachteil, dass Änderungen ggf. hochgeladen werden müssen, weil Änderungen eines Blatte oder einer Datei sich da nicht über mehrere Blätter oder Dateien verbreiten.
    Perspektivisch solltest Du da mal über eine Datenbanklösung nachdenken.
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige