Clever-Excel-Forum

Normale Version: Private Sub Worksheet_BeforeDoubleClick Problem
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe eine Frage zum Verhalten von "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)"

Folgende Ausgagssituation:

Blatt ist komplett gesperrt/geschützt und "Auswählen geschützte Zellen" ist deaktiviert bis auf Zelle A1, in diese Zelle soll beim Doppelklick das Ereignis "Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)" ausgelöst werden und ein "x" in A1 geschrieben werden, bzw. wenn "X" schon drin steht, dann eben leeren. Das funktioniert auch TOP. Problem, wenn ich mit der Maus auf z.B. B20 gehe, kann ich diese nicht auswählen, logisch. Wenn ich aber auf B20 doppelklicke, dann wird in A1 "X" eingetragen...
Wie kann ich das vermeiden?

Vielen Dank
LG, Alexandra
Hi,

du musst prüfen ob Target die Zelle A1 ist:

Code:
If Target.Address = "$A$1" Then
oder
Code:
If Target Is Range("A1") Then
oder
Code:
If Not Intersect(Target, Range("A1")) Is Nothing Then
oder ...
Moin Helmut,

ich war auch überrascht, aber weil es sich um ein Event des Worksheets handelt ist Target nicht unbedingt die Zelle unterm Mauszeiger, sondern (wahrscheinlich) diejenige mit dem Fokus. Wenn nur eine Zelle nicht gesperrt ist, ist diese das Target.

Ich sehe da nur die Möglichkeit, ein ActiveX-Steuerelement über Zelle A1 zu legen und dessen Event abzufangen.

Viele Grüße
derHöpp
Hi,

stimmt. 42

Also ich würde dann ja entweder noch eine weitere Zelle nicht schützen oder noch besser das Auswählen aller Zellen zulassen.
Hallo Helmut,

selbst wenn ich eine andere Zelle "nicht schütze", ist es das gleiche Ergebnis, denn wenn der Fokus auf A1 ist und ich irgendwo auf dem Blatt doppelklicke wird in A1 "X" eingetragen.
Ich habe das nun mit deine zweiten Option gelöst, und habe alle Zellen zur Auswahl freigegeben, trotz Schutz.

Vielen Dank für eure Hilfe
LG, Alexandra

26865

Mit wenigen Handgriffen klappe es auch mit nicht auswählbaren gesperrten Zellen:
- ermittle die aktuelle Mausposition beim Doppelclick
- ermittle, welche Zelle unter dem Mauszeiger aktiv ist. 

Code:
Option Explicit
Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As MouseCoord) As Long

Private Type MouseCoord
   x     As Long
   y     As Long
End Type

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim curMousePosition    As MouseCoord
Dim rngMouse            As Range
   
Call GetCursorPos(curMousePosition)
Set rngMouse = Me.Parent.Windows(1).RangeFromPoint(curMousePosition.x, curMousePosition.y)

If Not rngMouse Is Nothing Then
   If Not Intersect(Me.Range("A1"), rngMouse) Is Nothing Then
      Range("A1").Value = IIf(Range("A1").Value = "x", "", "x")
   End If
End If
Cancel = True
End Sub