Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1940to1944
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

BeforeDoubleClick

BeforeDoubleClick
12.08.2023 15:11:05
Dieter
Hey All,
Ich habe mal vor einiger Zeit hier den Code bekommen für den Befehl Zeile farblich markieren ab der Zeile (SpalteA) A3 bis L
Wenn ich aus der Spalte A gehe, geht die Markierung weg.
Jetzt hätte ich es aber gerne das der Code bei einer Worksheet_BeforeDoubleClick funktioniert.
Leider klappt das nicht indem ich einfach den Befehl Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) ändere.
Was muss geändert werden ?
Hier mal der Code

'Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' Farblich unterlegen bei ab A3 geht
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) 'neu geht nicht
Static slngRow As Long
Dim objRange As Range
Set objRange = Intersect(Target, Range(Cells(3, 1), Cells(Rows.Count, 1)))
If Not objRange Is Nothing Then
Range(Cells(3, 1), Cells(Rows.Count, 12)).Interior.Pattern = xlPatternNone
With objRange.Cells(1, 1)
Range(Cells(.Row, 1), Cells(.Row, 12)).Interior.Color = vbCyan 'vbGreen
slngRow = .Row
End With
Set objRange = Nothing
Else
If slngRow > Target.Cells(1, 1).Row Or Target.Cells(1, 1).column > 12 Then _
Range(Cells(3, 1), Cells(Rows.Count, 12)).Interior.Pattern = xlPatternNone
End If

End Sub

Danke im Voraus der Hilfe
MfG.
Dieter

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: BeforeDoubleClick
12.08.2023 15:29:09
ralf_b
funktioniert doch.
BeforeDoubleClick
12.08.2023 19:57:34
GerdL
Moin Dieter,

probier mal aus.


Public slngrow As Long
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) ' Farblich unterlegen bei ab A3
Dim objRange As Range

Set objRange = Intersect(Target, Range(Cells(3, 1), Cells(Rows.Count, 1)))
Cancel = True
If Not objRange Is Nothing Then
Range(Cells(3, 1), Cells(Rows.Count, 12)).Interior.Pattern = xlPatternNone
With objRange.Cells(1, 1)
Range(Cells(.Row, 1), Cells(.Row, 12)).Interior.Color = vbCyan 'vbGreen
slngrow = .Row
End With
Set objRange = Nothing
End If

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' Muster entfernen

If slngrow > Target.Cells(1, 1).Row Or Target.Cells(1, 1).Column > 12 Then
Range(Cells(3, 1), Cells(Rows.Count, 12)).Interior.Pattern = xlPatternNone
End If

End Sub

Gruß Gerd
Anzeige
BeforeDoubleClick
16.08.2023 18:47:56
daniel
Hi
kannst du bitte nochmal genau beschreiben, was passieren soll?

das erste ist klar, bei einem Doppelklick auf eine Zelle soll der Zellbereich A-L in dieser Zeile eingefärbt werden.
Wie lange soll jetzt diese Zeile eingefärbt bleiben?
a) bis du eine neue Zelle doppelt klickst
b) bis du eine andere Zelle auswählst
c) bis du eine andere Zelle in einer anderen Zeile auswählst
d) noch was anderes (bitte beschreiben)

Prinzipell würde ich das ganze mit Hilfe der Bedingten Formatierung lösen.

lege beispielsweise für den Zellbereich A3:L999 eine Bedingte Formatierung an mit der Regelformel ab: =Zeile()=$A$1
dann reicht es aus, die Zeilennummer der zu färbenden Zeile in die Zelle A1 zu schreiben und wenn man den Wert in A1 löscht oder was anderes reinschreibt, ist die Färbung wieder weg:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)

Range("A1").Value = Target.Row
Cancel = true
End Sub


dann kann man auch über andere Events wie das Selection_Change die Zeile wieder entfärben, beispielsweise dann wenn man eine Zelle in einer anderen Zeile anklickt:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Row > Range("A1").Value Then Range("A1").ClearContents
End Sub


oder man kann die Färbung mit einem Rechtsklick aufheben
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)

If Range("A1").Value > "" Then
Range("A1").ClearContents
Cancel = True
End If
End Sub


oder man programmiert es so, dass man die Färbung aufheben kann, wenn man nochmal einen Doppelklick auf die gefärbte Zeile macht:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) 'neu geht nicht

With Range("A1")
If .Value = Target.Row Then
.ClearContents
Else
.Value = Target.Row
End If
End With
Cancel = True
End Sub


die Färbung über die Bedingte Formatierung macht dir vieles leichter, weil du dich nicht darum kümmern musst, die Zellen wieder zurückzufärben, sondern du änderst einfach die Bedingung. Die Zellen können auch vorab anderweitig formatiert sein und bekommen dann wieder ihre ursprüngliche Formatierung zurück, ohne dass du die irgenwie speichern und wieder herstellen musst.

Gruß Daniel
Anzeige
BeforeDoubleClick
17.08.2023 16:57:39
Dieter
Hallo Daniel,
Erst einmal ganz herzlichen Dank für Deine Mühe, Erläuterung und Vorschläge.
Einfach genial.
Ich habe das mit der Bedingten Formatierung versucht, und dann die ersten beiden Codes genommen.
Das klappt prima wie ich es haben wollte, aber das Cancel = true musste ich rausnehmen da ich die Zelle sonst nicht bearbeiten konnte.
Zu Deinen Fragen,
vom Prinzip wie Deine beiden ersten Codes nur ohne bedingte Formatierung.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)

Range("A1").Value = Target.Row
'Cancel = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row > Range("A1").Value Then Range("A1").ClearContents
End Sub


Ginge das auch ??
Wenn nicht oder zu umständlich, lasse ich es so.
Auf der anderen Seite, sollte das ohne Formatierung gehen, könnte ich den Code auch noch gut anderweitig einsetzen.
Aber wie gesagt wenn es Dir keine großen Umstände macht.

MfG.
Dieter
Anzeige
BeforeDoubleClick
14.08.2023 16:22:22
Dieter
Hey all,
Sorry das ich mich jetzt erst melde, hatte zu tun.
Erst mal danke für die Meldungen, ralf leider klappt es nicht wie Du meinst sonst hätte ich nach keiner Lösung gefragt.
Gerd, bei Dir ist es so, das es soweit klappt außer das ich dann nicht die Zellen bearbeiten kann.
Vielleicht gibt es noch eine andere Idee.
Danke im Vorraus

MfG.
Dieter
BeforeDoubleClick
14.08.2023 19:19:38
Oberschlumpf
Hi Dieter,

lass dir mal mit Hilfe von Google eine Erklärung für Cancel = True zeigen.
Hilfts?

Ciao
Thorsten
BeforeDoubleClick
15.08.2023 16:06:39
Dieter
Hallo Thorsten,
Danke der Antwort, habe gelesen, aber leider nicht viel verstanden davon.
Habe mal mit dem Cancel = True rumprobiert, aber es ist nicht so wie ich gerne hätte.
Bei dem Code, macht er mir die Zeile, Zelle aktiv, sie wird farbig, und ich kann die daten ändern. " Richtig "
Wenn ich aber dann Enter drücke, und er mir in die nächste Zeile springt bleibt die vorherige aber trotzdem farbig.
Und das sollte eben nicht sein. Darum geht es.
Nur wenn ich dann irgend eine nächste Zeile anklicke in Spalte A soll mit DoubleClick wieder farbig werden.

Vielleicht hast Du noch eine andere Idee. ?

MfG.
Dieter
Anzeige
BeforeDoubleClick
15.08.2023 16:25:24
Oberschlumpf
Hi Dieter,

schön, obwohl, wie du schreibst, nicht verstanden, scheinst du nun Cancel = True wohl trotzdem richtig einzusetzen.

Dein Hinweis...
Wenn ich aber dann Enter drücke, und er mir in die nächste Zeile springt bleibt die vorherige aber trotzdem farbig.
Und das sollte eben nicht sein. Darum geht es.


...hier geht es nun aber um das Change-Ereignis einer Zelle (in deinen Beiträgen bisher ging es nur um BeforeDoubleClick und SelectionChange)
Daher würde ich empfehlen, dass du einen neuen Beitrag erstellst; vergiss aber nicht, die Erfolge zu zeigen, die du bis hier erreicht hast.

Ciao
Thorsten
Anzeige
BeforeDoubleClick
16.08.2023 18:18:15
Dieter
Hallo Thorsten,
Danke Deiner Auskunft, aber was würde es mir bringen wenn ich einen neuen Thread aufmache, wo ich das selbe Problem habe. ?
Ob nun Zitat "hier geht es nun aber um das Change-Ereignis einer Zelle (in deinen Beiträgen bisher ging es nur um BeforeDoubleClick und SelectionChange)"
geht oder anders, ich blicke da nicht durch.
Ich habe jetzt den Code
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)

Static slngrow As Long
Dim objRange As Range
Set objRange = Intersect(Target, Range(Cells(3, 1), Cells(Rows.Count, 1)))
If Not objRange Is Nothing Then
Range(Cells(3, 1), Cells(Rows.Count, 12)).Interior.Pattern = xlPatternNone
With objRange.Cells(1, 1)
Range(Cells(.Row, 1), Cells(.Row, 12)).Interior.Color = vbCyan 'vbGreen
slngrow = .Row
End With
Set objRange = Nothing
Else
If slngrow > Target.Cells(1, 1).Row Or Target.Cells(1, 1).Column > 12 Then _
Range(Cells(3, 1), Cells(Rows.Count, 12)).Interior.Pattern = xlPatternNone
End If
End Sub

und den Code darunter gesetzt
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  ' Code vielleicht noch anpassen ?

If slngrow > Target.Cells(1, 1).Row Or Target.Cells(1, 1).Column > 12 Then
Range(Cells(3, 1), Cells(Rows.Count, 12)).Interior.Pattern = xlPatternNone
End If
End Sub


das geht schon mal bis auf wenn ich jetzt in der gleichen Zeile bleibe mit Tab zB. wird wieder weiß anstatt grün bleibt.
Das müsste noch behoben werden und es ist wie ich möchte.
Denke bei dem unteren Code müsste noch eine Abfrage hin ?? ob selbe Zeile ?? dann grün ansonsten weiß.
Hast Du vielleicht dafür eine Idee ?

MfG.
Dieter
Anzeige
BeforeDoubleClick
16.08.2023 19:14:24
Oberschlumpf
Hi Dieter,

siehe letzte Antwort von Daniel - auch er hat ja noch ganz viele Nachfragen, weil deine Beschreibung(en) eben leider noch nich die genauesten waren/sind.
Und genau aus dem Grund kam von mir die Idee mit neuem Beitrag - weil dort dann vielleicht von Beginn alles genau(er) von dir beschrieben wird.
Und deine Frage an mich: Nein, ich weiß leider keine Lösung für dein Problem.
Weiter viel Erfolg.

Ciao
Thorsten
BeforeDoubleClick
12.08.2023 15:42:05
onur
Cancel =True
End Sub

48 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige