321 Aufrufe
Gefragt in Tabellenkalkulation von peters Mitglied (460 Punkte)
Bearbeitet von peters

Hallo zusammen!

Ich habe ein geschütztes Tabellenblatt, das ich per VBA wie folgt schütze:

    Tabelle13.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, Password:="123"
      Tabelle13.Protect UserInterfaceOnly:=True, Password:="123"

In diesem Blatt befinden sich verbundene Zellen (A2:F6), deren Verbindung per VBA gelöst werden sollen.
Dazu habe ich folgenden Code(-auszug):

  
            Dim BLattName As String
            BLattName = ActiveSheet.Name

            Sheets(BLattName).Range("A2:F6").Select
            Selection.UnMerge
            Selection.ClearContents
          

Bei "Selection.UnMerge" bleibt Excel ständig mit einer Fehlermeldung hängen.

    "Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler"

Wo ist mein Gedanken-/Vorgehensfehler?

Gruß

Peter

P.S.:
Mir ist gerade noch eine Wunderlichkeit aufgefallen:
Entferne ich den Blattschutz vor der Makroausführung und setze den Blattschutz dann wieder (mit dem gleichen Code wie oben angegeben), funktioniert alles einwandfrei!
Das ist reproduzierbar, ich habe es mehrfach auf beide Arten getestet:
Ohne den Blattschutzt zu entfernen und erneut zu setzen = Fehlermeldung
Mit Blattschutz entfernen und erneut setzen = läuft fehlerfrei durch!

Das kapiere ich mal überhaupt nicht mehr...!

6 Antworten

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

du hast die Lösung schon gefunden! Wenn du in einem geschützten Blatt arbeiten willst, egal ob per Eingabe oder per VBA, musst du den Blattschutz erst aufheben.

Also Blattschutz aufheben, Zellverbindungen aufheben und Blattschutz wieder setzen:

Sub Verbindung_loeschen()
Dim BLattName As String
 
BLattName = ActiveSheet.Name
With Worksheets(BLattName)
   .Unprotect "123"
   With .Range("A2:F6")
     .unmerge
     .ClearContents
   End With
  .Protect "123"
End With

End Sub

Gruß

M.O.

0 Punkte
Beantwortet von peters Mitglied (460 Punkte)

Hallo M.O.,

da muss ich Dir, auch als Profi-Laie, widersprechen.
Durch die Zeile

Tabelle13.Protect UserInterfaceOnly:=True, Password:="123"

beim Setzen des Blattschutzes, wird ja explizit die Möglichkeit geschaffen, dass Makros dennoch ausgeführt werden.

Probiere es aus, Du kannst auf diese Weise z.B. Inhalte gesperrter Zellen per Code ändern.

Ich hatte ja auch im P.S. geschrieben, dass ich den Blattschutz entfernt und dann nochmals neu gesetzt habe und es dann (mit gesetztem Blattschutz) funktionierte.

Den Blattschutz zu entfernen ist zwar eine Möglichkeit, aber dann müsste ich das PW im Code hinterlegen.
Da dies aber ein Master-PW ist, das ich für das gesamte Projekt nutze, möchte ich das eben nicht machen.
Es lassen sich ja bekanntermaßen auch PW-geschützte VBA-Projekte wieder entsperren - und dann sind alle Türen offen ...

Gruß

Peter

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)

Hallo Peter,

das mit dem UserInterfacheOnly hatte ich doch glatt überlesen und auch deine Frage missverstanden blush.

Du schreibst ja, dass das ein Code-Auszug ist. Wird der Blattschutz im gleichen Code gesetzt oder in einem anderen?

Du kannst auch mal versuchen auf Selection zu verzichten:

With Worksheets(BLattName).Range("A2:F6")
            .UnMerge
            .ClearContents
End With

Gruß

M.O.

0 Punkte
Beantwortet von peters Mitglied (460 Punkte)

Hallo M.O.,

kein Problem, ich lese selbst oft selektiv und falsch  laugh

Über die With-Variante schmeißt Excel die gleiche Fehlermeldung und auch bei unmerge raus...

Der Blattschutz wird aus einem anderen Makro gesetzt, aber das sollte ja keine Rolle spielen, oder?

Das Einzige, was mir noch einfällt ist, dass zwischen dem Setzen des Blattschutzes und dem jetzigen Makro der Tabellenblattname geändert wird (frag nicht warum, das wird benötigt).

Allerdings spreche ich die Tabelle beim Setzen des Blattschutzes ja mit deren Code-Namen (Tabelle13) an, und der ändert sich ja nicht.

Gruß

Peter

0 Punkte
Beantwortet von m-o Profi (22.7k Punkte)
Hallo Peter,

ohne Tabelle und Makros zu kennen, ist es schwierig dem Problem auf die Spur zu kommen.

Ist es möglich, die verbundenen Zellen vor dem Schützen des Blattes zu entfernen?

Gruß

M.O.
0 Punkte
Beantwortet von peters Mitglied (460 Punkte)
Hallo M.O.,

nein, das brächte den Nutzen des Konstuktes durcheinander.

Ich habe es jetzt so gelöst, dass dieses eine Blatt ein separates PW bekommt und im Code hintelegt wird.
Ich hebe also den Blattschutz vor dem Makro auf und setze ihn danach wieder.

Knackt irgendwann mal jemand diese Vorlage, ist es zumindest nicht das Master-PW - und absolute Sicherheit gibt es eh nicht.  ;-)

Trotzdem danke.

Gruß

Peter

P.S. Vielleicht hast Du eine Idee zu meinem nächsten Problem? Eine neue Frage ist online
...