914 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,
ich habe ein wenig oberflächige Erfahrung im Umgang mit Makros bei Excel. Ich bin auf das Problem gestoßen, wenn ich in einem Arbeitsblatt die aktive Zelle mit einem farblichen Hintergrund versehe, welcher beim Verlassen der Zelle wieder verschwindet und die alte Formatierung wieder herstellt, dass ich

dann bei anderen Makros eine Fehlermeldung bekomme (meistens Laufzeitfehler 94 oder bei anderen Makros 1004, welche ohne den Code zur Farbmarkierung an keiner Stelle auftreten.)

Das ist der Code:

Option Explicit
Dim AlteFarbe As Integer, MarkierteZelle As String
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If MarkierteZelle = "" Then
MarkierteZelle = Target.Address
AlteFarbe = Target.Interior.ColorIndex
Target.Interior.ColorIndex = 4
Else
If Range(MarkierteZelle).Interior.ColorIndex = 4 Then
Range(MarkierteZelle).Interior.ColorIndex = AlteFarbe
End If
AlteFarbe = Target.Interior.ColorIndex
MarkierteZelle = Target.Address
Target.Interior.ColorIndex = 4
End If
End Sub

Die ersten beiden Zeilen sind under ALLGEMEIN - DEKLARATION aufgeführt,
die restlichen unter WORKSHEET - SELECTIONCHANGE

Den Code verstehe ich teilweise, ich habe ihn mir im Internet herausgesucht.

Ich würde mich freuen, wenn mir jemand helfen kann.

Danke BK

2 Antworten

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

wenn du durch Makros Änderungen auf deinem Arbeitsblatt ausführst, dann wird dadurch das Worksheet-Change-Ereignis ausgelöst. Dies kann dann zu Fehlern führen.

Baue mal in deine anderen Makros als ersten Befehl ein:
Application.EnableEvents = False

und als letzten Befehl
Application.EnableEvents = True

ein.

Andere Möglichkeit: Du definierst eine Public-Variable (in einem allgemeinen Modul), die du in deinem Worksheet-Change-Ereignis auswertest:

Public nichtausf As String

Sub test()
nichtausf = "ja"
Cells(4, 1) = 5
nichtausf = "nein"
End Sub


und in dein Worksheet-Change-Ereignis dann eine entsprechende If-Abfrage:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If nichtausf = "ja" Then Exit Sub
If MarkierteZelle = "" Then
...


Gruß

M.O.
0 Punkte
Beantwortet von
Hi M.O.,

super vielen Dank, habe deinen ersten Lösungsweg angewendet und alles hat sofort prima geklappt. Dein Tipp war unwahrscheinlich nützlich für mich.

BK
...