Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Blattschutz deaktivieren/aktivieren nach Userform

Forumthread: Blattschutz deaktivieren/aktivieren nach Userform

Blattschutz deaktivieren/aktivieren nach Userform
28.02.2014 14:07:17
Stefan
Hallo zusammen,
unser VBA-Projekt ist in den letzten Zügen - soweit funktioniert nun alles.
Wir befüllen eine OPL (Offene-Punkte-Liste) über ein Userform mit Aufbaben, um diese in unseren täglichen Meetings zu tracken.
Jetzt möchte ich natürlich, dass jeder mit dieser Liste arbeitet - jedoch nicht auf die Idee kommt, gewisse Dinge zu ändern oder zu löschen.
So möchten wir die OPL mit einem Blattschutz versehen und nur bestimmte Spalten zur Bearbeitung freigeben. Wie bekomme ich in meinen Code die Befehle rein, um den Blattschutz beim Aufruf der Maske zu deaktivieren und nach Füllung über die Userform wieder zu aktivieren? Habe schon etwas herumprobiert - schaffe es aber nicht wirklich.
Hier mal der Codeabschnitt zum Befüllen meiner OPL (ich gehe davon aus, hier muss vorne dran die Deaktivierung / dahinter die Aktivierung des Schutzes, oder?) Wo/wie muss ich das einbauen? - Gruß Stefan
[code]

Private Sub cmdEingabe_Click()
'Fügt eingetragene Werte in Tabellenblatt und schließt das Formular frmMaske
If txtTermin = "" Then
MsgBox ("Bitte Termin zur Fertigstellung eintragen")
txtTermin.SetFocus
Exit Sub
End If
Dim intErsteLeereZeile As Long
intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row + 1
ActiveSheet.Cells(intErsteLeereZeile, 2).Value = Me.txtLfdNr.Value
ActiveSheet.Cells(intErsteLeereZeile, 3).Value = CDate(Me.txtDatum.Value)
ActiveSheet.Cells(intErsteLeereZeile, 4).Value = Me.txtKW.Value
ActiveSheet.Cells(intErsteLeereZeile, 5).Value = Me.cboVerantwortlich.Value
ActiveSheet.Cells(intErsteLeereZeile, 6).Value = Me.cboKategorie.Value
ActiveSheet.Cells(intErsteLeereZeile, 10).Value = Me.cboPrio.Value
ActiveSheet.Cells(intErsteLeereZeile, 13).Value = Me.cboStatus.Value
ActiveSheet.Cells(intErsteLeereZeile, 7).Value = Me.txtThema.Value
ActiveSheet.Cells(intErsteLeereZeile, 8).Value = Me.txtBezeichnung.Value
ActiveSheet.Cells(intErsteLeereZeile, 9).Value = Me.txtMaßnahmen.Value
ActiveSheet.Cells(intErsteLeereZeile, 12).Value = Me.cboFortschritt.Value
ActiveSheet.Cells(intErsteLeereZeile, 11).Value = Me.txtTermin.Value
ActiveSheet.Cells(intErsteLeereZeile, 14).Value = Me.cboHerkunft.Value
Unload frmMaske
End Sub
[code]
Das die Codeabschnitte für den Blattschutz:
[/code]Sub Blattschutz_deaktiverien()
'
' Blattschutz_deaktiverien Makro
'
'
ActiveSheet.Unprotect
End Sub
Sub Blattschutz_aktivieren()
'
' Blattschutz_aktivieren Makro
'
'
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True
End Sub [/code]

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Blattschutz deaktivieren/aktivieren nach Userform
28.02.2014 14:45:37
Tino
Hallo,
füge bei ActiveSheet.Protect
den Parameter UserInterfaceOnly:=True mit ein,
dann können Makros in die Zellen schreiben die Tabelle bleibt aber geschützt.
Dies kannst Du zBsp. beim start der Userform erstellen.
Beispiel:
Private Sub UserForm_Initialize()
ActiveSheet.Protect Password:="xxxx", UserInterfaceOnly:=True, _
DrawingObjects:=True, Contents:=True, _
Scenarios:=True, AllowSorting:=True, AllowFiltering:=True
End Sub
Gruß Tino

Anzeige
AW: Blattschutz deaktivieren/aktivieren nach Userform
28.02.2014 14:47:36
Rudi
Hallo,
deaktivieren vor intErsteLeereZeile =.. und aktivieren hinter Unload frmMaske
wo sonst?
Gruß
Rudi

AW: Blattschutz deaktivieren/aktivieren nach Userform
28.02.2014 14:54:21
GuentherH
der Unprotect-methode musst Du ein Passwort übergeben
Dazu im Declarationsteil des 1ten Moduls
Global const Passwort = "Geheimwort"
schreiben
Dann immer mit activesheet.protect Passwort
und activesheet.unprotect Passwort
arbeiten.
Unbedingt auch den Code mit Passwort schützen, dann kann dort nur jemand nachschauen, der das Passwort für den Code kennt.
mehr Schutz ist Makulatur, denn mit dem richtigen Code aus dem Netz knackt man den Blattschutz recht schnell.
Deinem bestehenden Code nach könnte Dir diese Anleitung reichen, um weiterzukommen.
Gruß,
Günther

Anzeige
nebenbei
28.02.2014 14:57:37
Rudi
Hallo,
das geht viel kürzer.
Private Sub cmdEingabe_Click()
'Fügt eingetragene Werte in Tabellenblatt und schließt das Formular frmMaske
Dim intErsteLeereZeile As Long
If txtTermin = "" Then
MsgBox ("Bitte Termin zur Fertigstellung eintragen")
txtTermin.SetFocus
Exit Sub
End If
Blattschutz_deaktivieren
intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row + 1
ActiveSheet.Cells(intErsteLeereZeile, 2).Resize(, 13) = Array( _
txtLfdNr, CDate(txtDatum), txtKW, cboVerantwortlich, cboKategorie, _
txtThema.Value, txtBezeichnung, txtMaßnahmen, cboPrio, txtTermin, _
cboFortschritt, cboStatus, cboHerkunft)
Unload frmMaske
Blattschutz_aktivieren
End Sub

Gruß
Rudi

Anzeige
AW: nebenbei
28.02.2014 16:12:38
Stefan
Habe das ganze nun hiermit lösen können - Vielen Dank für eure Hilfe!
Private Sub UserForm_Initialize()
ActiveSheet.Protect Password:="xxxx", UserInterfaceOnly:=True, _
DrawingObjects:=True, Contents:=True, _
Scenarios:=True, AllowSorting:=True, AllowFiltering:=True
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Blattschutz in Excel: Deaktivieren und Aktivieren über Userform


Schritt-für-Schritt-Anleitung

Um den Blattschutz in Excel zu deaktivieren und aktivieren, während Du mit einer Userform arbeitest, folge diesen Schritten:

  1. Blattschutz Deaktivieren: Füge vor dem Code, der die Werte in die Tabelle einfügt, den Befehl zum Deaktivieren des Blattschutzes hinzu. Verwende dafür die folgende Methode:

    ActiveSheet.Unprotect Password:="DeinPasswort"
  2. Werte Einfügen: Verwende Deinen bestehenden Code, um die Daten in die OPL (Offene-Punkte-Liste) einzufügen.

  3. Blattschutz Aktivieren: Nach dem Einfügen der Werte solltest Du den Blattschutz wieder aktivieren. Dies kannst Du mit dem folgenden Befehl tun:

    ActiveSheet.Protect Password:="DeinPasswort", UserInterfaceOnly:=True
  4. Beispielcode: Hier ist ein vollständiges Beispiel, wie Dein Code aussehen könnte:

    Private Sub cmdEingabe_Click()
       If txtTermin = "" Then
           MsgBox ("Bitte Termin zur Fertigstellung eintragen")
           txtTermin.SetFocus
           Exit Sub
       End If
    
       ActiveSheet.Unprotect Password:="DeinPasswort"
       Dim intErsteLeereZeile As Long
       intErsteLeereZeile = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row + 1
       ActiveSheet.Cells(intErsteLeereZeile, 2).Value = Me.txtLfdNr.Value
       ' Füge hier den Rest Deiner Zellen ein
       ActiveSheet.Protect Password:="DeinPasswort", UserInterfaceOnly:=True
       Unload frmMaske
    End Sub

Häufige Fehler und Lösungen

  • Fehler: Blattschutz wird nicht deaktiviert.

    • Lösung: Stelle sicher, dass das Passwort korrekt übergeben wird und dass die Unprotect-Methode vor dem Datenfüllen aufgerufen wird.
  • Fehler: Daten können nicht in geschützte Zellen eingegeben werden.

    • Lösung: Vergewissere Dich, dass die UserInterfaceOnly-Option gesetzt ist, um Makros das Schreiben in die geschützten Zellen zu ermöglichen.

Alternative Methoden

Es gibt verschiedene Möglichkeiten, den Blattschutz in Excel zu verwalten:

  • Passwortschutz: Füge in Deinem Code ein Passwort hinzu, um den Blattschutz sicherer zu machen. Dies kannst Du wie folgt tun:

    Global Const Passwort = "Geheimwort"
  • UserForm_Initialize: Du kannst den Blattschutz auch gleich beim Start der Userform aktivieren, indem Du folgenden Code verwendest:

    Private Sub UserForm_Initialize()
       ActiveSheet.Protect Password:=Passwort, UserInterfaceOnly:=True
    End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie der Blattschutz in verschiedenen Szenarien verwendet werden kann:

  • Beispiel 1: Einfache Datenverwaltung in einer OPL-Liste, wo nur bestimmte Spalten bearbeitet werden dürfen.
  • Beispiel 2: Verwendung von Dropdown-Listen in geschützten Zellen, die den Benutzern erlauben, nur ausgewählte Werte einzugeben.

Tipps für Profis

  • Verwendung von UserInterfaceOnly: Dies ist besonders nützlich, wenn Du sicherstellen möchtest, dass Makros weiterhin auf geschützte Zellen zugreifen können, während die Benutzeroberfläche geschützt bleibt.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um sicherzustellen, dass der Blattschutz immer korrekt aktiviert oder deaktiviert wird, auch wenn Fehler auftreten.

FAQ: Häufige Fragen

1. Kann ich den Blattschutz ohne Passwort deaktivieren? Nein, um den Blattschutz zu deaktivieren, musst Du ein Passwort angeben, wenn Du einen Blattschutz eingerichtet hast.

2. Was passiert, wenn ich UserInterfaceOnly nicht verwende? Ohne UserInterfaceOnly können Benutzer keine Daten in die geschützten Zellen eingeben, selbst wenn ein Makro die Zellen ändert.

3. Wie sichere ich meinen Code vor unbefugtem Zugriff? Schütze Deinen VBA-Code mit einem Passwort, um sicherzustellen, dass nur autorisierte Benutzer Änderungen vornehmen können.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige