Zurück zur Homepage

Zelle unter der Mausposition #2

Unter Position 58, Zellposition unter dem Mauscursor ermitteln wurde eine Methode dargestellt,  die Zelle unter der Mausposition zu ermitteln,

In diesem Beispiel wird ein ganz anderer Weg gegangen.

Es gibt leider kein MouseMove-Ereignis, das ausgelöst wird, wenn die Maus über ein Tabellenblatt bewegt wird. Verschiedene Steuerelemente bieten aber das Ereignis MouseMove an, mit dem man auch die aktuelle Position der Maus über dem Element feststellen kann.

Dabei wird ein durchsichtiges Bild-Steuerelement so groß wie das sichtbare Tabellenblatt gemacht. Dessen MouseMove-Ereignis wird überwacht und damit die Zelle ermittelt, unter der sich die Maus befindet. Damit man mit dem Tabellenblatt arbeiten kann, wird bei einem Klick auf das Steuerelement das Bildsteuerelement ausgeblendet und die unter dem Mauszeiger befindliche Zelle selektiert

 

Beispieldatei (MouseMovePic.zip 12 KB)

 

Option Explicit

Private Sub cmdMousePos_Click()
With imgMouse
   
'An- bzw Ausschalten
   .Visible = 
Not .Visible
   .Left = 0
   .Top = 0
   .Width = ActiveWindow.VisibleRange.Width
   .Height = ActiveWindow.VisibleRange.Height
End With
End Sub

Private Sub imgMouse_MouseMove( _
   
ByVal Button As Integer, _
   
ByVal Shift As Integer, _
   
ByVal As Single, _
   
ByVal As Single)
Dim i                      As Long
Static k                   As Long
Static strVisibleRange     As String
Static avarZellPos()       As Variant
Dim rngZelle               As Range
Dim strAktAdress           As String

With ActiveWindow.VisibleRange
   
If strVisibleRange <> .Address Then
      
ReDim avarZellPos(1 To .Cells.Count, 1 To 5)
      
For Each rngZelle In .Cells
         i = i + 1
         
With rngZelle
            avarZellPos(i, 1) = .Left
            avarZellPos(i, 2) = (.Left + .Width)
            avarZellPos(i, 3) = .Top
            avarZellPos(i, 4) = (.Top + .Height)
            avarZellPos(i, 5) = .Address
         
End With
      
Next
      strVisibleRange = .Address
   
End If
End With
   
'Ermitteln, über welcher Zelle sich die Maus befindet
For i = 1 To UBound(avarZellPos, 1)
   
If X > avarZellPos(i, 1) And _
      X <= avarZellPos(i, 2) 
Then
      
If Y > avarZellPos(i, 3) And _
         Y <= avarZellPos(i, 4) 
Then
            strAktAdress = avarZellPos(i, 5)
         
Exit For
      
End If
    
End If
Next

With imgMouse
   
Select Case Button
      
Case Is = xlPrimaryButton
         .Visible = 
False
         
' Zelle selektieren
         Me.Range(strAktAdress).Select
      
Case Is = xlSecondaryButton
         .Visible = 
False
         
' Kontextmenü Zelle anzeigen
         Application.CommandBars(
"Cell").ShowPopup
      
Case Else
   
End Select
End With


'Mausposition ausgeben
Application.StatusBar = strAktAdress


End Sub