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

Bereich per VBA entsperren......Bitte Hilfe

Forumthread: Bereich per VBA entsperren......Bitte Hilfe

Bereich per VBA entsperren......Bitte Hilfe
Peter
Hallo Exceller + innen,
in Abhängigkeit eines Zellwertes werden mit String F die Zellen des Bereiches entsperrt; mit Hilfe von String G alle gesperrt; und mit Hilfe von String D sollen die ausgefüllten Zellen des Bereiches gesperrt bleiben, die leeren Zellen entsperrt werden...Bitte um Eure Hilfe (also für String D, die anderen beiden klappen vorzüglich:
Dim F As String
F = Sheets("Tabelle1").[C8].Value
If F = "100" Then
With Sheets("Tabelle2")
.Unprotect Password:="JA"
.Range("A2:F150").Locked = False
End With
End If

Dim G As String
G = Sheets("Tabelle1").[C8].Value
If G = "200" Then
With Sheets("Tabelle2")
.Unprotect Password:="Ja"
.Range("A2:F150").Locked = True
.Protect Password:="Ja"
End With
End If
Dim D As String
D = Sheets("Tabelle1").[C8].Value
If D = "300" Then
With Sheets("Tabelle2")
.Unprotect Password = "Ja"
.Range("leere Zellen im Bereich A2:F150").Locked = False
.Range("ausgefüllte Zellen im Bereich A2:A150").Locked = True
.Protect Password:="Ja"
End With
End If
Vielen Dank
Peter S.
Anzeige
AW: Bereich per VBA entsperren
Florian
Hallo, Peter,

Sub Teilsperren()
Dim Zelle
  For Each Zelle In ActiveSheet.UsedRange
    If Zelle = "" Then
      Zelle.Locked = False
    Else
      Zelle.Locked = True
    End If
  Next Zelle
End Sub


Gruß,
Florian
Anzeige
AW: Bereich per VBA entsperren
Peter
Hallo Florian,
habe Deinen Code wie folgt eingebaut
Dim D As String
D = Sheets("Tabelle1").[C8].Value
If D = "300" Then
With Sheets("Tabelle2").[A2:F150]
.Unprotect Password = "Ja"
Dim Cells
For Each Cells In Sheets("Tabelle2").UsedRange
If Cells = "" Then
Cells.Locked = False
Else
Cells.Locked = True
End If
Next Cells
.Protect Password:="Ja"
End With
End If
Aber das will so nicht...was ist nicht richtig?
Danke
Peter S.
Anzeige
AW: Bereich per VBA entsperren
K.Rola
Hallo,
verwende nie Excelbegriffe als Variable(bei dir Cells):
Option Explicit

Sub Schutz()
Dim D As String, Zelle As Range
D = Sheets("Tabelle1").[C8].Value
If D = "300" Then
With Sheets("Tabelle2")
.Unprotect Password:="Ja"
.[A2:F150].Locked = False
For Each Zelle In .[A2:F150]
If Zelle <> "" Then Zelle.Locked = True
Next
.Protect Password:="Ja"
End With
End If
End Sub

Gruß K.Rola
Anzeige
AW: Bereich per VBA entsperren
Peter
Hallo K.Rola
zunächst mal viele Dank für Denen Hinweis (kleines 1x1 des VBA)....
Jetzt bringt er zwar keine Fehlermeldung mehr aber entsperrt die leeren Zellen trotzdem nicht?
wieso?
Peter S.
AW: Bereich per VBA entsperren
K.Rola
Hallo,
das ist eigentlich nicht möglich, weil die Zellen mit der Anweisung
.[A2:F150].Locked = False auf jeden fall erstmal entsperrt werden.
Da muss ein anderer Haken sein, ggf. sind die Zellen nicht leer,
enhalten vielleicht Formeln?
Lad die Mappe doch mal hoch.
Gruß K.Rola
Anzeige
AW: Bereich per VBA entsperren
Peter
Hallo K.Rola
ich möchte die Mappe zum Server senden
Geht aber nicht....sagt immer unzulässiges Format...nur Jpg oder gif möglich?
Peter S.
AW: Bereich per VBA entsperren
K.Rola
Hallo,
lies dir mal durch, was da steht, es dürfen nur bestimmte Dateien
sein, *.xls sind aber möglich. Der Dateiname darf keine Leerzeichen enthalten.
Du kannst die datei ggf. auch zuvor zippen.
Gruß K.Rola
Anzeige
AW: Bereich per VBA entsperren
Peter
Hier ist sie .....petersmappe.xls
AW: Bereich per VBA entsperren
Peter
geht net?...ich hab sie getauf petersmappe.xls ...nimmt er net an
AW: Bereich per VBA entsperren
Florian
Hallo, Peter,
nenne die Mappe "c:\peter.xls", trage diesen namen in das Feld ein und klicke auf "Datei zum Server. Anschließend markierst Du den Link mit der Maus und drückst Strg + c zum Kopieren. Danach schreibst Du eine Antwort und fügst den Link mit Strg + v im den Antworttext ein.
Gruß,
Florian
Anzeige
AW: Bereich per VBA entsperren
Florian
Hallo, Peter,
Mir war so, als wolltest Du mit Tastenkombinationen arbeiten.
Schreibe uns doch bitte einmal detailliert, was Deine Tabelle leisten soll.
Gruß,
Florian
Anzeige
AW: Bereich per VBA entsperren
Peter
Also Florian,
bei "C8 = 100 ... CmdButton1 .... es erscheint die Eingabemaske; alle Felder sind entsperrt; funktioniert"
"bei C8 = 200 ... CmdButton2 ... Eingabemaske erscheint; alle Felder sind gesperrt; können nur angesehen werden; funktioniert auch (allerdings nur wenn ich im Code von Button1 und 2: on error resume next setze)"
"bei C8 = 300 ... CmdButton2 (oder auch evtl 3) erscheint; alle Felder mit Inhalt sollen angesehen werden können(sind also gesperrt), alle freien Felder können mit einer Neuaufnahme versehen werden; die neuaufgenommenen können beim nächsten change-ereignis dann ja nur angesehen werden weil sie nicht mehr leer sind"
Hoffe du kannst was damit anfangen
Vielen vielen Dank für deine Mühe
Peter S.
Anzeige
AW: Bereich per VBA entsperren
Florian
Hallo, Peter,
was ich meinte, war die Aufgabe, die die Tabelle erledigen soll. Das was Du erarbeitet hast, ist soweit ich es überblicke viel zu umständlich. Laß uns bitte wissen, was Du mit der Datei machst.
Gruß,
Florian
AW: Bereich per VBA entsperren
18.04.2004 17:45:27
Peter
Florian,
nun dass es umständlich ist kann möglich sein, liegt an meiner Unerfahrenheit mit VBA (stecke da in den Anfängen).
in "Daten" sind Mitarbeiter mit bestimmten Serien-Nummer hinterlegt und im Feld C8 wird beim Start vom Mitarbeiter seine Seriennummer eingegeben. Damit ist auch die Berechtigung vergeben, mittels der Eingabemaske die man dann über den jeweiligen CmdButton öffnet, die "Mitarbeier" entweder nur anzusehen, oder neue Mitarbeiter aufzunehmen oder....und das ist die Vollberechtigung... Mitarbeiter zu löschen oder auch neue aufzunehmen..
War es das was du wissen wolltest?
Peter S.
Anzeige
AW: Bereich per VBA entsperren
K.Rola
Hallo,
du hebst mit den Commandbutton den Schutz auf und zeigst die Datenmaske,
so kann das doch gar nicht funktionieren.
Wenn du 300 eingibst soll doch wohl alles gesperrt sein, wozu wird dann
der Schutz mit dem Button aufgehoben?
Das locked = true bzw. false funktioniert nur, wenn das Blatt geschützt ist.
Gruß K.Rola
Anzeige
AW: Bereich per VBA entsperren
Peter
Hallo K.Rola,
das habe ich dann im Nachgang auch bemerkt und bei den Buttons den Schutz bzw Freigabe rausgenommen...dann kommt allerdings ne Fehlermeldung;
diese habe ich mit on error resume next aufgehoben; dann geht es mit 100 und mit 300, jedoch die Teilenstperrung funzt nicht
Danke
Peter S.
Anzeige
AW: Bereich per VBA entsperren
Florian
https://www.herber.de/bbs/user/5372.xls
Hallo, Peter,
so ganz hab' ich's noch nicht verstanden. Hier ist erst einmal eine aufgeräumte Version. Möchtest Du einzelnen Mitarbeitern bestimmte Rechte einräumen?
Schau bitte einmal die Version an und kommentiere Sie.
Gruß,
Florian
P.S. Antwort kann dauern. Bin bis Mi auf Dienstreise.
Anzeige
AW: Bereich per VBA entsperren
Peter
Hallo Florian,
poste hier für dich nochmal die Mappe mit dem bisherigen Stand....wäre schön wenn wir uns Mittwoch oder Donnerstag nochmal sprechen würden.
https://www.herber.de/bbs/user/5393.xls
Danke
Peter S.
AW: Bereich per VBA entsperren
Florian
Hallo, Peter,
sorry, aber ich steige hier aus.
Ich bin davon ausgegangen, dass Du an meiner aufgeräumten Version weiterarbeitest und ein paar hilfreiche Hinweise hinterläßt. Das Aufräumen hat mich Zeit gekostet.
Mit der alten Version von vor ein paar Tagen fange ich nicht noch einmal an.
Gruß,
Florian
Anzeige
AW: Bereich per VBA entsperren
22.04.2004 18:43:53
Peter
Hallo Florian,
ich hatte aus Versehen die falsche Datei gepostet...selbstverständlich hab ich mit der aufgeräumten weitergearbeitet.....ich hoffe du hast dann auch 2 Tage später gesehen, daß ich die Mappe fertig nochmal gepostet hab.
Danke
Peter S.
AW: Bereich per VBA entsperren
Florian
Hallo, Peter,
Sub Schutz()
Dim As String
Dim Cells
  D = Sheets("Tabelle1").[C8].Value
  If D = "300" Then
    Sheets("Tabelle2").Unprotect Password:="Ja"
    For Each Cells In Sheets("Tabelle2").UsedRange
      If Cells = "" Then
        Cells.Locked = False
      Else
        Cells.Locked = True
      End If
    Next Cells
    Sheets("Tabelle2").Protect Password:="Ja"
  End If
oder
https://www.herber.de/bbs/user/5356.xls
Punkt 1:
  Das Dim As String steht immer am Anfang einer Prozedur.
Punkt 2:
  .unprotect bezieht sich nicht auf ein RANGE-Objekt, sondern auf ein ganzes WORKSHEET.
Gruß,
Florian
Anzeige
AW: Bereich per VBA entsperren
Peter
Hallo Florian,
auch Dir vielen Dank, jedoch trifft auf deinen Code das gleiche zu....keine Fehlermeldung, aber auch keine Entsperrung der leeren Zellen?
Peter S.
AW: Bereich per VBA entsperren
18.04.2004 13:53:13
Florian
Hallo, Peter,
Sub Schutz()
Dim As String
Dim Zellen
  D = Sheets("Tabelle1").[C8].Value
  If D = "300" Then
    Sheets("Tabelle2").Unprotect Password:="Ja"
    For Each Zellen In Sheets("Tabelle2").UsedRange
      If IsEmpty(Zellen) Then
        Zellen.Locked = False
      Else
        Zellen.Locked = True
      End If
    Next Zellen
    Sheets("Tabelle2").Protect Password:="Ja"
  End If
End Sub

Gruß,
Florian
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Bereich per VBA entsperren: Schritt-für-Schritt-Anleitung


Schritt-für-Schritt-Anleitung

Um Zellen in Excel per VBA zu entsperren, kannst du folgende Schritte ausführen:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke auf Einfügen und wähle Modul.
  3. Kopiere den folgenden Code in das Modul:

    Sub ZellenEntsperren()
        Dim D As String
        Dim Zelle As Range
    
        D = Sheets("Tabelle1").[C8].Value
    
        If D = "300" Then
            With Sheets("Tabelle2")
                .Unprotect Password:="Ja"
                For Each Zelle In .UsedRange
                    If IsEmpty(Zelle) Then
                        Zelle.Locked = False
                    Else
                        Zelle.Locked = True
                    End If
                Next Zelle
                .Protect Password:="Ja"
            End With
        End If
    End Sub
  4. Passe den Code an:

    • Stelle sicher, dass die Blätter Tabelle1 und Tabelle2 existieren und die Zelle C8 den richtigen Wert enthält.
  5. Führe den Code aus:

    • Drücke F5, um das Makro auszuführen.

Häufige Fehler und Lösungen

  1. Fehler: Zellen werden nicht entsperrt:

    • Überprüfe, ob die Zellen in Tabelle2 tatsächlich leer sind. Manchmal enthalten sie unsichtbare Zeichen oder Formeln.
  2. Fehler: Passwort ist falsch:

    • Achte darauf, dass das Passwort im Code korrekt eingegeben ist.
  3. Fehler: Kein Schutz vorhanden:

    • Stelle sicher, dass das Arbeitsblatt tatsächlich geschützt ist, bevor du versuchst, Zellen zu entsperren.

Alternative Methoden

Eine alternative Methode zum Entsperren von Zellen in Excel ist:

  • Verwendung von Excel-Formeln: Du kannst auch Datenüberprüfung und bedingte Formatierung nutzen, um das Verhalten der Zellen zu steuern.

  • Direktes Entsperren über das Menü: Klicke mit der rechten Maustaste auf die Zelle und wähle Zellen formatieren, gehe dann zum Tab Schutz und deaktiviere die Option Gesperrt.


Praktische Beispiele

Hier sind einige Beispiele, wie du das VBA-Skript verwenden kannst:

  1. Beispiel 1: Entsperren aller Zellen in einem festgelegten Bereich:

    With Sheets("Tabelle2")
        .Unprotect Password:="Ja"
        .Range("A2:F150").Locked = False
        .Protect Password:="Ja"
    End With
  2. Beispiel 2: Zellen abhängig von einem spezifischen Wert entsperren:

    If Sheets("Tabelle1").[C8].Value = "100" Then
        ' Zellen entsperren
    End If

Tipps für Profis

  • Fehlerbehandlung: Nutze On Error Resume Next, um unerwartete Fehler zu vermeiden. Allerdings solltest du diese Zeile mit Bedacht einsetzen, um nicht wichtige Fehler zu übersehen.

  • Variablen benennen: Verwende klar definierte Variablen und vermeide die Verwendung von Excel-Reservierten Wörtern (wie Cells), um Verwirrungen zu vermeiden.

  • Makros speichern: Speichere deine Arbeitsmappe als xlsm, um sicherzustellen, dass VBA-Makros erhalten bleiben.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Bereiche gleichzeitig entsperren?
Du kannst mehrere Range-Objekte in einer Schleife durchlaufen und die .Locked-Eigenschaft entsprechend setzen.

2. Was passiert, wenn ich das Passwort vergesse?
Es gibt keine eingebaute Methode, um ein vergessenes Passwort zu umgehen. Du solltest Passwörter sicher aufbewahren oder sie in einem sicheren Passwortmanager speichern.

3. Kann ich VBA verwenden, um Zellen in einer geschützten Arbeitsmappe zu entsperren?
Ja, solange du das richtige Passwort für den Schutz der Arbeitsmappe hast, kannst du die .Unprotect-Methode verwenden, um die Zellen zu entsperren.

4. Welche Excel-Version benötige ich für VBA?
VBA ist in den meisten Versionen von Excel verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und Microsoft 365.

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