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

BeforeDoubleClick für Farbmarkierung im bestimmten Bereich

Forumthread: BeforeDoubleClick für Farbmarkierung im bestimmten Bereich

BeforeDoubleClick für Farbmarkierung im bestimmten Bereich
05.09.2024 09:44:01
dori25
Hallo VBA Profis,

ich hoffe, ihr könnt mir bei meinem Anliegen helfen.

Ich habe eine Arbeitsmappe, in der die Zellen im Bereich B21:M45 per Doppelklick gefärbt werden sollen. Bei erneutem Doppelklick wird die Färbung aufgehoben. Die Einfärbung funktioniert schon mal. Das Problem ist nur, dass ich es nicht schaffe den Gültigkeitsbereich einzugrenzen. Ich habe alle Zellen drum herum bereits schreibgeschützt und das Makro somit für die Bereich deaktiviert. Allerdings gibt es einige Drop-Down-Felder, die ich nicht sperren kann ohne die Auswahl zu sperren. Daher würde ich gerne den Code begrenzen. Ich weiß nicht wo im folgenden Code der Fehler liegt und bitte daher um eure Hilfe:



Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, [B21:M45]) Is Nothing Then
Cancel = True

If ActiveCell.Interior.ColorIndex = 34 Then
ActiveCell.Interior.ColorIndex = 0

ElseIf ActiveCell.Interior.ColorIndex = 0 Then
ActiveCell.Interior.ColorIndex = xlNone

Else
ActiveCell.Interior.ColorIndex = 34
End If

End Sub


Da die Dropdown Felder in einer anderen Farbe mit weißer Schrift gefärbt sind, schießt mir der Code dort das Layout kaputt.

Folgende Haken habe ich innerhalb des Blattschutzes gesetzte: Entsperrte Zellen auswählen, Zellen formatieren, Zeilen formatieren, Objekte bearbeiten und Szenarios bearbeiten.
Vielen Dank vorab!

LG
dori
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: BeforeDoubleClick für Farbmarkierung im bestimmten Bereich
05.09.2024 10:16:01
Onur
Was genau ist denn für dich "Dropdown Felder" ?
AW: BeforeDoubleClick für Farbmarkierung im bestimmten Bereich
05.09.2024 15:29:09
GerdL
Hallo, probier mal.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)


If Not Intersect(Target, Range("B21:M45")) Is Nothing Then

Cancel = True
With Target.Interior
If .ColorIndex = 34 Then
.ColorIndex = xlNone
Else
.Interior.ColorIndex = 34
End If
End With

End If

End Sub

Gruß Gerd
Anzeige
AW: BeforeDoubleClick für Farbmarkierung im bestimmten Bereich
05.09.2024 10:23:43
dori25
Hallo Onur,

ein zellgebundenes Kästchen (unten rechts am Zellrand), das die Auswahl bestimmter Daten erlaubt. Ich habe per Datenüberprüfung jeweils verschiedene Listen hinterlegt, sodass keine anderen Werte in die jeweiligen Zellen eingetragen werden können.

Ich hoffe, das beantwortet deine Frage.

LG
dori
Anzeige
AW: BeforeDoubleClick für Farbmarkierung im bestimmten Bereich
05.09.2024 10:33:16
Onur
Angenommen, die Zellen mit Datenüberprüfung wären A1 und B2:
Wenn du die Zellen mit Datenüberprüfung ausschliessen willst, einfach sowas als erste Zeile (nach dem "Private Sub...) einfügen:
If Target.Address = "$A$1" Or Target.Address = "$B$2" Then Exit Sub
Anzeige
AW: BeforeDoubleClick für Farbmarkierung im bestimmten Bereich
05.09.2024 10:46:56
dori25
Hallo Onur,

danke für den Tipp. Habe ich was falsch gemacht?

Mir wird kein Fehler angezeigt, aber leider funktioniert die Einfärbung per Doppelklick noch.
Ich habe den Code schon mal für zwei Dropdown-Felder angepasst, aber leider stelle ich keinen Unterschied fest.

Mein Code sieht jetzt wie folgt aus:


Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Address = "$F$3" Or Target.Address = "$F$4" Then Exit Sub

If ActiveCell.Interior.ColorIndex = 34 Then
ActiveCell.Interior.ColorIndex = 0

ElseIf ActiveCell.Interior.ColorIndex = 0 Then
ActiveCell.Interior.ColorIndex = xlNone

Else
ActiveCell.Interior.ColorIndex = 34
End If

End Sub




Insgesamt sind die folgenden Zellen mit Dropdown: "$F$3", "$F$4", "$F$5", "$L$3", "$L$4" und "$L$5".

Danke vorab.

LG
dori
Anzeige
AW: BeforeDoubleClick für Farbmarkierung im bestimmten Bereich
05.09.2024 10:49:00
Onur
Die Zelle, die angeklickt wurde ist NICHT ActiveCell, sondern immer Target.
AW: BeforeDoubleClick für Farbmarkierung im bestimmten Bereich
05.09.2024 11:00:13
Onur
Ausserdem hast du
If Not Intersect(Target, [B21:M45]) Is Nothing Then

rausgenommen - warum ? DAS hatte ich nicht geschrieben.
Mach besser
If Intersect(Target, [B21:M45]) Is Nothing Then Exit Sub

daraus.
Anzeige
AW: BeforeDoubleClick für Farbmarkierung im bestimmten Bereich
05.09.2024 11:24:25
dori25
Es klappt!!

Herzlichen Dank, da wäre ich nie drauf gekommen :)

"If Target.Adress" war jetzt gar nicht mehr nötig.

Der Vollständigkeit halber hier der aktuelle Code:




Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Intersect(Target, [B21:M45]) Is Nothing Then Exit Sub

If Target.Interior.ColorIndex = 34 Then
Target.Interior.ColorIndex = 0

ElseIf Target.Interior.ColorIndex = 0 Then
Target.Interior.ColorIndex = xlNone

Else
Target.Interior.ColorIndex = 34
End If

End Sub





LG
dori
Anzeige
Gerne !
05.09.2024 11:27:11
Onur
Sehe ich auch eben erst, dass F3 und F4 sowieso nicht im Bereich liegen. :)
AW: Gerne !
05.09.2024 11:31:58
Onur
Du solltest noch vor "Exit Sub" ein "Cancel=True" einfügen, da sonst Excel immer noch auf Eingabe wartet, weil du ein Doppelklick gemacht hast.
AW: Fehlermeldung
05.09.2024 11:45:53
dori25
Bei mir kommt dann leider folgender Fehler:

"Fehler beim Kompilieren: If-Block ohne End If"

Was kann ich da ändern?
Anzeige
AW: Fehlermeldung
05.09.2024 11:46:57
Onur
Bei welchem Code?
AW: Fehlermeldung
05.09.2024 12:49:56
dori25
Bei folgendem Code mit der "Cancel=True" Anpassung:


Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Intersect(Target, [B21:M45]) Is Nothing Then
Cancel = True
Exit Sub

If Target.Interior.ColorIndex = 34 Then
Target.Interior.ColorIndex = 0

ElseIf Target.Interior.ColorIndex = 0 Then
Target.Interior.ColorIndex = xlNone

Else
Target.Interior.ColorIndex = 34
End If

End Sub
Anzeige
AW: Fehlermeldung
06.09.2024 00:14:05
Onur
DAS genügt völlig:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Intersect(Target, [B21:M45]) Is Nothing Then Exit Sub
Dim co
co = Target.Interior.ColorIndex
Target.Interior.ColorIndex = 34 - co
Cancel = True
End Sub
Anzeige

Forumthreads zu verwandten Themen

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige