Private Sub Worksheet_BeforeDoubleClick Problem
#1
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
Antworten Top
#2
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 ...
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#3
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
Antworten Top
#4
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.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#5
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
Antworten Top
#6
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
[-] Folgende(r) 2 Nutzer sagen Danke an Gast für diesen Beitrag:
  • derHoepp, cysu11
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste