Clever-Excel-Forum

Normale Version: Blattschutz trotz Makro - Fehler im Code
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich stehe vor einem Problem. Ich habe in meine Excel Mappe ein Makro eingebaut, welches immer die gesamte ausgewählte Zeile gelb markiert.
Nachfolgend habe ich einen Blattschutz über VBA eingesetzt.

Auf den einzelnen Blättern funktioniert das auch einwandfrei. Wenn ich allerdings das Tabellenblatt via eines Links wechsle, spuckt er mir folgende Fehlermeldung aus:
Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler.

Wenn ich auf debuggen klicke, sagt er mir, dass im Code für den eingefärbten Balken etwas nicht stimme (bei If Not...)

Kann mir jemand helfen?

LG Lea



Mein Code: 


Private Sub Workbook_SheetSelectionChange( _
ByVal sh As Object, ByVal Target As Excel.Range)
ActiveSheet.Unprotect
Static AlteZelle As Range


If Not AlteZelle Is Nothing Then
AlteZelle.EntireRow.Interior.ColorIndex = _
xlColorIndexNone
End If

Target.EntireRow.Interior.ColorIndex = 6
Set AlteZelle = Target

ActiveSheet.Protect

End Sub
Hallo,

das Phänomen ist für mich nicht reproduzierbar. Somit:

Was ist denn das für ein Link?

Funktioniert der Link, wird der Sprung ausgeführt?

Handelt es sich um einen Sprung in eine andere Exceldatei??

vg, MM
Hallo,

ich erkläre mal nochmal.
Entschuldigt bitte, meine Excel Skills sind noch nicht so ausgereift.

Also:

Ich habe eine Excel Datei erstellt mit mehreren Blättern. Diese Blätter sind miteinander über Links verknüpft (Sprich: ich klicke auf einen Link und lande auf einem anderen Excel Blatt). Die funktionieren auch.

Des weiteren gibt es auf allen Blättern das Makro, das immer die gesamte Zeile farbig markiert, wenn diese mit dem Cursor oder per Klick ausgewählt wurde. Den Code hierfür habe ich im VBA hinterlegt und entspricht folgendem:
Code:
Private Sub Workbook_SheetSelectionChange( _
ByVal sh As Object, ByVal Target As Excel.Range)

Static AlteZelle As Range

If Not AlteZelle Is Nothing Then
AlteZelle.EntireRow.Interior.ColorIndex = _
xlColorIndexNone
End If

Target.EntireRow.Interior.ColorIndex = 6
Set AlteZelle = Target

End Sub


Nun möchte ich alle Blätter noch schützen.
Folgender Code sollte den Blattschutz einbauen und das Makro trotzdem arbeiten lassen


Code:
Private Sub Workbook_SheetSelectionChange( _
 ByVal sh As Object, ByVal Target As Excel.Range)
 ActiveSheet.Unprotect
 Static AlteZelle As Range
 
 
 If Not AlteZelle Is Nothing Then
   If Not AlteZelle.Parent Is sh Then
     AlteZelle.Parent.Unprotect
     AlteZelle.EntireRow.Interior.ColorIndex = _
       xlColorIndexNone
     AlteZelle.Parent.Protect
   Else
     AlteZelle.EntireRow.Interior.ColorIndex = _
       xlColorIndexNone
   End If
 End If
 
 Target.EntireRow.Interior.ColorIndex = 6
 Set AlteZelle = Target
 
 ActiveSheet.Protect
 
End Sub


Allerdings spuckt er mir dann die Fehlermeldung

Laufzeitfehler 1004: Anwendungs- oder objektdefinierter Fehler.

aus, soblad ich das Blatt wechsle. Wenn ich die Fehlermeldung beende, funktioniert das Makro wieder einwandfrei.
Eine ständige Fehlermeldung ist auf Dauer sehr nervig.

Kannst du jetzt vielleicht helfen?

LG
Ich hab nochmal ein wenig rumgespielt und tatsächlich tritt der Fehler auch bei mir auf wenn ich mit einem Link innerhalb der Arbeitsmappe springe. Allerdings nur sporadisch. In den Fällen in den der Fehler auftrat, zeigte Sh noch auf das alte Blatt (mit dem Link), nicht auf das Sprungziel (wie es sein soll).

Probier mal folgendes :

Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Static AlteZelle As Range
  If Not AlteZelle Is Nothing Then
    AlteZelle.Worksheet.Unprotect
    AlteZelle.EntireRow.Interior.ColorIndex = xlColorIndexNone
    AlteZelle.Worksheet.Protect
  End If

  ActiveSheet.Unprotect
  Set Target = ActiveSheet.Range(Target.Address)
  Target.EntireRow.Interior.ColorIndex = 6
  Set AlteZelle = Target
  ActiveSheet.Protect
End Sub
Heyyy!

Ich danke dir vielmals.
Jetzt funktioniert es. Was hast du geändert?
Zwei Dinge

Zum einen Blattschutz aufheben beim Löschen der alten Markierung

Zum anderen ein Workaround um ein Problem, dass ich selbst nicht so ganz verstehe .... :19:  es wird sichergestellt, dass die Einfärbung auf dem Zielarbeitsblatt stattfindet.

vg, MM