Anzeige

[Excel] Einzelne Tabellen sperren


josef24

Erfahrenes Mitglied
#1
Guten Tag in die Runde. Habe eine Tabelle erstellt wo ich mittels USERFORM die Tabelle1 befülle. Alle Tabellen sind zur Zeit offen, und jeder kann auch neben der USERFORM folglich Daten in Tabelle1 verändern. Dabei wird immer wieder vergessen, das Datenfelder auch gewisse "Eigenschaften" haben. Damit unberechtigtes ändern nicht mehr vorkommen soll, möchte ich die Tabelle1 für den Zugriff anderer sperren. Es soll denen jedoch möglich sein über die USER Funktion Änderungen ein zu bringen.
Frage hierzu: Welche Funktionen muss ich einrichten damit, andere eine Veränderung vornehmen, aber nicht in einzelne Tabellen direkt schreiben können? Kann mir hier jemand weiter helfen. Danke im voraus und Gruß Josef
 

josef24

Erfahrenes Mitglied
#3
Danke erst mal. Kann man auch mit dem Code z. B. eine bestimmte Tabelle ansteuern?
Zitat aus der weiterhin empfohlenen Seite.
schütze deine Blätter mit dem Protect-Parameter userinterfaceonly:=true
Dann kannst du aus VBA heraus alles mögliche in geschützte Zellen schreiben.

oder
Mir schwebt bei dem Code etwas vor wie : With Worksheets("Tabell1")
Danke und Gruß Josef
Code:
Sub tt()
   With ActiveSheet
      .Unprotect "passwort"
      .Protect Password:="passwort", userinterfaceonly:=True
   End With
End Sub
 
Zuletzt bearbeitet:

Zvoni

Erfahrenes Mitglied
#4
Ja, geht, und dein Ansatz ist der richtige.
Bin eh kein Freund von diesem ActiveIrgendwas

Dir muss aber klar sein: Sobald der User seine UserForm ausgefüllt hat, und z.B. Auf OK clickt, muss die Zeile bevor du ins Tabellenblatt schreibst, der "Unprotect"-Aufruf sein.
 

josef24

Erfahrenes Mitglied
#5
Danke dir für den Hinweis. Habe deinen Vorschlag mal direkt in der Tabelle1 unter Code einfügen installiert. Dann habe ich das einmal laufen lassen, und das Ergebnis ist: Das Tabellenblatt ist nicht gesperrt. Hatte ich vielleicht etwas nicht berücksichtigt. Gruß Josef
 
Zuletzt bearbeitet:

Zvoni

Erfahrenes Mitglied
#6
Kannst du mal dein Workbook hier reinhängen?
Wird aber erst morgen nachmittag dass ich dran kann (hab Kundendienst morgen)

EDIT: Hab dir mal ein extrem simples Beispiel gebaut
 

Anhänge

Zuletzt bearbeitet:

josef24

Erfahrenes Mitglied
#8
Nach längerem suchen etwas effektives gefunden. Aber was ich nicht verstehe ist, die ersten 5 Zeilen blockiert dieser Kode, und danach ist alles möglich (Änderungen im Datenfeld) . Hat hierfür jemand eine Erklärung und könnte mir weiterhelfen. Danke und Gruß Josef
Code:
Option Explicit

Sub Schutz()
   ActiveSheet.Protect Password:="123", UserInterfaceOnly:=True
End Sub

Sub Test()
   Dim Merker
   Merker = ActiveCell
   ActiveCell = "bla"
   MsgBox "Zelle verändert trotz Schutz"
   ActiveCell = Merker
End Sub
 

Zvoni

Erfahrenes Mitglied
#9
Hallo Josef,

ohne jetzt in deine Tabelle schauen zu können:
Schau in mein Beispiel:
Die wichtige Zeile steht in "Workbook_open"!!!
in Command1_click steht "unprotect", dann wird der Inhalt der Textbox nach A1 geschrieben, nächste Zeile wieder "Protect".
Mach die Userform zu (Bsp. rechts oben auf das "x" clicken), und du kannst nicht in die Tabelle direkt schreiben, weil noch immer der "Protect" besteht.
 

josef24

Erfahrenes Mitglied
#10
Entschuldigung, aber deinen Vorschlag will ich nicht umsetzen, weil er nicht das tut was ich eigentlich wollte.
Mein Wunsch ist es eine komplettes Tabellenblatt für den Zugriff anderer zu blockieren, und das macht dein Codevorschlag nicht, Sorry. Gruß Josef
 

josef24

Erfahrenes Mitglied
#11
Hallo und guten Abend. Komme erst jetzt dazu meine Idee mit dem Blattschutz nochmals aufzugreifen. Habe im Netz ein Beispiel entdeckt wo ich allerdings noch eure Unterstützung bräuchte. Ich möchte die Tabelle1 wie hier gezeigt über die USERform geziehlt ansprechen und sperren.
Wie kann ich die beiden Subs zu einer machen. Schon jetzt Danke für ggf. eure Hilfe. Gruß Josef

Code:
Private Sub UserForm_Activate()
     If lstData.ListCount > 0 Then lstData.ListIndex = 0
     End Sub

      Sub testblattschutz()
Dim i As Integer, Blatt As Worksheet
    Set Blatt = ActiveSheet
    Dim pw As String
    pw = InputBox("Bitte Kennwort zum Schützen eingeben", "wolli24", "KENNWORT eingeben")
    For i = 1 To ActiveWorkbook.Worksheets.Count
        ActiveWorkbook.Worksheets(i).Activate
        ActiveSheet.Protect Password:=pw
    Next i
    Blatt.Select


End Sub
 
Anzeige

Neue Beiträge

Anzeige