Protekt und Benutzermodus funktioniert nicht Hilfe!
25.02.2024 14:58:08
Werner
Ich habe ein Datenbankblatt mit einer Eingabemaske erstellt. (Nach Kai Wissmann) alles funktioniert wie es soll.
Jetzt habe ich mit dem Schutz Probleme.
Beide Tabellenblätter alle Zellen gesperrt und nur die zu bearbeitenden freigegen.
Steuern möchte ich dies über einen Benutzermodus.
Hier der Code:
Option Explicit
Sub DB_Protect()
tb_Datenbank.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True
tb_Datenbank.EnableSelection = xlNoSelection
End Sub
Sub DB_Unprotect()
tb_Datenbank.Unprotect
End Sub
Sub Eingabe_Protect()
tb_Eingabeformular.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True
tb_Eingabeformular.EnableSelection = xlNoSelection
End Sub
Sub Eingabe_Unprotect()
tb_Eingabeformular.Unprotect
End Sub
Sub Benutzermodus()
With Application
.ExecuteExcel4Macro "Show-Toolbar(""Ribbon"",False)"
.DisplayFullScreen = True
.DisplayFormulaBar = False
.Caption = "Gutachtenstatistik"
End With
With ActiveWindow
.DisplayWorkbookTabs = False
End With
End Sub
Sub Entwicklermodus()
With Application
.ExecuteExcel4Macro "Show-Toolbar(""Ribbon"",True)"
.DisplayFormulaBar = True
.DisplayFullScreen = False
End With
With ActiveWindow
.DisplayWorkbookTabs = True
End With
End Sub
Den Start habe ich im Workbook deklariert:
Option Explicit
Private Sub Workbook_Open()
tb_Datenbank.Select
Call Benutzermodus
End Sub
Wenn ich im Benutzermodus starte Werden die Zellen nicht freigegeben. (Alles ist gesperrt) Mein Speicherbutton auf der Eingabemaske funktioniert, ist aber nicht mehr sichtbar.
Zur Ansichtt auch der Allgemeine Code:
Option Explicit
Sub GutachtenMonatLoeschen()
Call DB_Unprotect
'Abfrage ob Gutachten Monat gelöschtwerden soll
Dim Antwort
Antwort = MsgBox("Soll der ausgewählte Monat wirklich gelöscht werden?", vbYesNo + vbQuestion, "Monatserfassung wirklich löschen?")
If Antwort = vbYes Then ActiveCell.EntireRow.Delete
Call DB_Protect
End Sub
Sub Gutachenchange_EingabeDB()
Call DB_Unprotect
Call Eingabe_Unprotect
'Tabelle einlesen
Dim tbl As ListObject
Set tbl = tb_Datenbank.ListObjects(1)
Dim Zeile As Long
'Gutachten anlegen oder bearbeiten
If tb_Eingabeformular.Shapes.Range(Array("txt_Anlegen", "img_Anlegen")).Visible = True Then
'Gutachten anlegen
'Gutachten bearbeiten
tbl.ListRows.Add
'Zeile in Variable speichern
Zeile = tbl.DataBodyRange.Rows.Count
'Gutachten bearbeiten
Else
Zeile = Range("Tabelle1[Lfd.-ID]").Find(What:=tb_Eingabeformular.Range("H11").Value _
, LookIn:=xlValues, LookAt:=xlWhole).Row - tbl.HeaderRowRange.Row
End If
'Datenbank befüllen
With tb_Eingabeformular
tbl.DataBodyRange(Zeile, 1).Value = .Range("H11").Value
tbl.DataBodyRange(Zeile, 2).Value = .Range("F13").Value
tbl.DataBodyRange(Zeile, 3).Value = .Range("H16").Value
tbl.DataBodyRange(Zeile, 4).Value = .Range("H18").Value
tbl.DataBodyRange(Zeile, 5).Value = .Range("H20").Value
tbl.DataBodyRange(Zeile, 6).Value = .Range("H22").Value
tbl.DataBodyRange(Zeile, 8).Value = .Range("H24").Value
tbl.DataBodyRange(Zeile, 10).Value = .Range("H27").Value
tbl.DataBodyRange(Zeile, 11).Value = .Range("H29").Value
End With
Call DB_Protect
Call Eingabe_Protect
'Navigieren zu Tabellenblatt Datenbank Gutachten
tb_Datenbank.Select
ActiveWindow.ScrollRow = tbl.DataBodyRange(Zeile, 1)
tbl.DataBodyRange(Zeile, 1).Select
End Sub
Sub GutachtenErfassen_DBEingabe()
Call Eingabe_Unprotect
'Tabelle einlesen
Dim tbl As ListObject
Set tbl = tb_Datenbank.ListObjects(1)
With tb_Eingabeformular
'Spalten leeren
.Columns("H").ClearContents
'Monatsauswahl ausblenden
.Rows(12).Hidden = False
.Rows(14).Hidden = False
'ID Einfügen
.Range("H11").Value = tbl.DataBodyRange(tbl.DataBodyRange.Rows.Count, 1).Value + 1
'Navigiere auf Eingabeformular
.Shapes.Range(Array("txt_Anlegen", "img_Anlegen")).Visible = True
.Shapes.Range(Array("txt_Bearbeiten", "img_Bearbeiten")).Visible = False
.Select
'Zelle auswählen
.Range("E13").Select
End With
Call Eingabe_Protect
End Sub
Sub GutachtenBearbeiten_DBEingabe()
Call Eingabe_Unprotect
'Tabelle einlesen
Dim tbl As ListObject
Set tbl = tb_Datenbank.ListObjects(1)
Dim Zeile As Long
Zeile = ActiveCell.Row - tbl.HeaderRowRange.Row
With tb_Eingabeformular
'Spalten leeren
.Columns("H").ClearContents
'Monatsauswahl ausblenden
.Rows(12).Hidden = True
.Rows(14).Hidden = True
'Eingabeformular befüllen
.Range("H11").Value = tbl.DataBodyRange(Zeile, 1).Value
.Range("H15").Value = tbl.DataBodyRange(Zeile, 2).Value
.Range("H16").Value = tbl.DataBodyRange(Zeile, 3).Value
.Range("H18").Value = tbl.DataBodyRange(Zeile, 4).Value
.Range("H20").Value = tbl.DataBodyRange(Zeile, 5).Value
.Range("H22").Value = tbl.DataBodyRange(Zeile, 6).Value
.Range("H24").Value = tbl.DataBodyRange(Zeile, 8).Value
.Range("H27").Value = tbl.DataBodyRange(Zeile, 10).Value
.Range("H29").Value = tbl.DataBodyRange(Zeile, 11).Value
'Navigiere auf Eingabeformular
.Shapes.Range(Array("txt_Anlegen", "img_Anlegen")).Visible = False
.Shapes.Range(Array("txt_Bearbeiten", "img_Bearbeiten")).Visible = True
.Select
'Zelle auswählen
.Range("H16").Select
End With
Call Eingabe_Protect
End Sub
Ich bin hier so ziemlich am Ende, und würde mich freuen, wenn mir jemand helfen kann. Herzlichen Dank im Voraus Gruß Werner