Excel VBA

Hallo Leute,

ich hätte zwei Fragen zu Excel VBA:

  1. Gibt es eine Möglichkeit abzufragen, ob das gewählte Objekt (egal wie es jetzt gewählt wurde) eine Datenreihe eines Diagramms, bzw. allgemeiner, welchen Typs es überhaupt ist?

  2. Gibt es eine Möglichkeit, innerhalb eines Makros den Benutzer ein Objekt mit der Maus auswählen zu lassen?

Danke und vG,
Christoph

Die Antwort zu Frage 1.:
Ja, mittels TypeName(Selection), z.B.

If Not TypeName(Selection) = „Series“ Then

  1. Gibt es eine Möglichkeit, innerhalb eines Makros den
    Benutzer ein Objekt mit der Maus auswählen zu lassen?

Hallo Christoph,

man könnte bei einem Linksklick die aktuelle Mausposition auswerten und prüfen über welchem Objekt die Maus gerade geklickt haben muß.

Nachstehender gefundener Code zeigt das Prinzip.
Tipp, beende alle anderen Excelmappen und übe in einer leeren neuen Mappe, irgendwie läßt sich der Code nicht stoppen.

Dann hol dir aus Ansicht—Smbolleiste die Symbolleiste Formular , daraus eine Schaltfläche und weise ihr das makro prcStartTimer zu.
Dann klicke auf die Schaltfläche, anschließend beliebig woanders hin, dir wird dann die Mausposition angezeigt.

Gruß
Reinhard

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( \_
 ByVal lpClassName As String, \_
 ByVal lpWindowName As String) As Long
Private Declare Function SetTimer Lib "user32.dll" ( \_
 ByVal hWnd As Long, \_
 ByVal nIDEvent As Long, \_
 ByVal uElapse As Long, \_
 ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( \_
 ByVal hWnd As Long, \_
 ByVal nIDEvent As Long) As Long
Private Declare Function GetCursorPos Lib "user32.dll" ( \_
 ByRef cPoint As POINTAPI) As Long
Private Declare Function GetAsyncKeyState Lib "user32.dll" ( \_
 ByVal vKey As Long) As Integer

Private Type POINTAPI
 x As Long
 y As Long
End Type

Private Const GC\_CLASSNAMEMSWORD = "OpusApp"
Private Const VK\_LBUTTON = &H1

Private udtPoint As POINTAPI
Private intClicks As Integer
Private intCoordinates(1 To 2, 1 To 2) As Integer

Public Sub prcStartTimer()
 Dim hWnd As Long
 intClicks = 0
 hWnd = FindWindow(GC\_CLASSNAMEMSWORD, vbNullString)
 SetTimer hWnd, 0, 10, AddressOf prcTimer
End Sub

Public Sub prcStopTimer()
 Dim hWnd As Long
 hWnd = FindWindow(GC\_CLASSNAMEMSWORD, vbNullString)
 KillTimer hWnd, 0
End Sub

Private Sub prcTimer(ByVal hWnd As Long, ByVal nIDEvent As Long, \_
 ByVal uElapse As Long, ByVal lpTimerFunc As Long)
 On Error Resume Next
 If GetAsyncKeyState(VK\_LBUTTON) = -32767 Then
 GetCursorPos udtPoint
 intClicks = intClicks + 1
 intCoordinates(intClicks, 1) = udtPoint.x
 intCoordinates(intClicks, 2) = udtPoint.y
 If intClicks = 1 Then
 'prcStopTimer
 MsgBox "Oben links x " & CStr(intCoordinates(1, 1)) & \_
 " y " & CStr(intCoordinates(1, 2)) & \_
 vbLf & " Unten rechts x " & CStr(intCoordinates(2, 1)) \_
 & " y " & CStr(intCoordinates(2, 2))
 End If
 End If
End Sub

Danke!