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

Zellen je Blatt mit Blattschutz

Forumthread: Zellen je Blatt mit Blattschutz

Zellen je Blatt mit Blattschutz
30.06.2023 10:19:49
Mirko

Hi,

ich habe eine Excel-Datei, in der ich ein Macro geschrieben habe welches:
- Jedes Blatt durchläuft (mit Ausnahmen basierend auf dem Namen)
- Auf jedem Blatt einen bestimmten Bereich aus dem Blattschutz ausnimmt
- Den Blattschutz aktiviert.




Sub Blattschutzaktivieren()
    Dim ws As Worksheet
  

    
    ' Schleife durch alle Arbeitsblätter in der Arbeitsmappe
    For Each ws In ThisWorkbook.Worksheets
     ' Überprüfen, ob das Arbeitsblatt übersprungen werden soll
        If ws.Name > "Vorlage" And ws.Name > "Übersicht" Then
                
                If ws.ProtectContents Then
                         ' Blattschutz aufheben
                     ws.Unprotect
                 End If
    
        ws.Range("B3:AJ182").Locked = False
    
        'Selection.Locked = False
        'Selection.FormulaHidden = False

            
            
            
        ws.Protect
        
        End If
        
    Next ws
    
    MsgBox "Makro ausgeführt", vbInformation
End Sub



Das funktioniert soweit. Nun möchte ich das Macro erweitert um folgende Funktion:

- Für jede Reihe in der in Zelle AJ ein "x" steht möchte ich die Reihe bzw. Bereich B-AJ in dieser Reihe wieder in den Blattschutz aufnehmen (sprich .locked = True)

Mein Versuch erzeugt leider ein Error 1004


Sub sperren()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim j As Long

    ' Schleife durch alle Arbeitsblätter in der Arbeitsmappe
    For Each ws In ThisWorkbook.Worksheets
        ' Überprüfen, ob das Arbeitsblatt übersprungen werden soll
        If ws.Name > "Vorlage" And ws.Name > "Übersicht" Then
            If ws.ProtectContents Then
                ' Blattschutz aufheben
                ws.Unprotect
            End If

            ws.Range("B3:AJ182").Locked = False
           
            lastRow = ws.Cells(ws.Rows.Count, "AJ").End(xlUp).Row ' Find the last row in column AJ
            
            ' Schleife durch jede Zeile
            For i = 3 To lastRow ' Assuming data starts from row 3 and not row 1
                ' Überprüfen, ob in Zelle AJ ein "x" steht
                If ws.Cells(i, 36).Value = "x" Then
                    
                    ' In dieser Zeile "x" gefunden, Zellen in Spalte B bis AJ ausschließen
                    For j = 2 To 36 ' Columns B to AJ are columns 2 to 36
                        ws.Cells(i, j).Locked = True
                    Next j
                    
                End If
            Next i
            
            ws.Protect
        
        End If
        
    Next ws
    
    MsgBox "Makro ausgeführt", vbInformation
End Sub



Kann mir damit jemand helfen?
https://www.herber.de/bbs/user/159770.xlsm

Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen je Blatt mit Blattschutz
30.06.2023 11:00:50
peterk
Hallo

Das Problem liegt in der Spalte AI, da Du hier verbunden Zeilen hast. Spalte 35 (AI) ausschliessen und alles funktioniert.

Peter


AW: Zellen je Blatt mit Blattschutz
30.06.2023 11:08:29
AlterDresdner
Hallo Mirko,
du versuchst einem Teil einer verbundenen Zelle (die Erfindungen des Teufels sind!) in Spalte AI eine EIgenschaft zuzuweisen. das geht nicht. Löse den Verbund auf, dann geht es.
Gruß der AlteDresdner


Anzeige
AW: Zellen je Blatt mit Blattschutz
30.06.2023 14:14:28
Piet
Hallo

ich denke so ist der Code eleganter. Ohne die zweite For j Schleife. Hinweis: Resize erweitert den Range Bereich!
Resize(1,34) um 34 Spalten nach Rechts, Resize (34,1) um 34 Zeilen nach unten. Einfacher zu programmieren!

mfg Piet

  • Sub sperren()
          Dim ws As Worksheet
          Dim lastRow As Long, i As Long
          ' Schleife durch alle Arbeitsblätter in der Arbeitsmappe
          For Each ws In ThisWorkbook.Worksheets
              ' Überprüfen, ob das Arbeitsblatt übersprungen werden soll
              If ws.Name > "Vorlage" And ws.Name > "Übersicht" Then
                 ws.Unprotect
                  ws.Range("B3:AJ182").Locked = False
                  lastRow = ws.Cells(ws.Rows.Count, "AJ").End(xlUp).Row ' Find the last row in column AJ
                  ' Schleife durch jede Zeile in Spalte AJ
                  For i = 3 To lastRow ' Assuming data starts from row 3 and not row 1
                      ' Überprüfen, ob in Zelle AJ ein "x" steht
                      If ws.Cells(i, 36).Value = "x" Then
                         ws.Cells(i, 36).Locked = True  'Spalte B-I
                         ws.Cells(i, 2).Resize(1, 33).Locked = True
                      End If
                  Next i
                  ws.Protect
              End If
          Next ws
          MsgBox "Makro ausgeführt", vbInformation
      End Sub


  • Anzeige
    ;

    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