Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Rechtsklick in Listview Element

Rechtsklick in Listview Element
10.02.2022 23:49:15
Robert
Hallo Leute,
Ich suche nach einer Erkennung eines Rechtsklick auf ein Item in einem Listview Element.
Mit einer Listbox ist das recht einfach..

Private Sub ListBox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
If Button = vbKeyRButton Then
If UserForm.ListBox.List(UserForm.ListBox.ListIndex) >= 0 Then
... Tu Was ...
End If
End If
Für das Listview Element habe ich, ausser ein paar Beiträgen zu VB.net, nicht viel gefunden...
Kann man das an VBA anpassen?

Private Sub ListView1_MouseDown(ByVal sender As Object,ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseDown
' Rechtsklick?
If e.Button = Windows.Forms.MouseButtons.Right Then
Dim oItem As ListViewItem = ListView1.GetItemAt(e.X, e.Y)
If oItem IsNot Nothing Then
' ... und Kontextmenü anzeigen
ContextMenuStrip1.Show(ListView1, e.X, e.Y)
End If
End If
End Sub
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Nur allgemein!
11.02.2022 07:13:58
RPP63
Moin!
Das Listview-Control gibt es bereits seit mindestens 15 Jahren nicht mehr in Excel-VBA.
Es ist Bestandteil der MSCOMCTL.ocx
Zu Ereignissen, die mit einem Control möglich sind, siehe
https://www.online-excel.de/excel/singsel_vba.php?f=160
Gruß Ralf, der natürlich offen lässt
Anzeige
AW: Rechtsklick in Listview Element
11.02.2022 10:40:46
Nepumuk
Hallo Robert,
so:

Private Sub ListView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
Dim objListItem As ListItem
If Button = vbKeyRButton Then
Set objListItem = ListView1.HitTest(x, y)
If Not objListItem Is Nothing Then
MsgBox "Hallo"
Set objListItem = Nothing
End If
End If
End Sub
Gruß
Nepumuk
Anzeige
AW: Rechtsklick in Listview Element
11.02.2022 11:31:56
Robert
Ah ok Danke Nepumuk.
Ich habe allerdings vergessen mit einzufügen, dass genau das Element über dem die Maus sich gerade befindet auch angewählt werden soll.
Kanndt du mir da auf die Sprünge helfen, da nicht genau weiß wie ich da die Itemid extrahieren soll.
Das ganze soll dann ein Kontextmenü öffen, bei dem 2..3 Aktionen mit dem Element ausgeführt werden sollen.
So hatte ich das zuletzt mit der Listbox gelöst.

Private Sub ListSelectedAnlagen_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
DragIndex = -1
If Button = 2 Then
With ListSelectedAnlagen
If .ListIndex = -1 Then
MsgBox "Erst ein Item wählen"
Exit Sub
End If
sTxt = .ListCount - 1
End With
Run "ListSelectedAnlagenRightClickMenu"
End If
End Sub


Anzeige
AW: Rechtsklick in Listview Element
11.02.2022 12:33:50
Nepumuk
Hallo Robert,
dann so:

Private Sub ListView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
If Button = vbKeyRButton Then
Call Application.OnTime(Now, "Test")
End If
End Sub
In einem Standardmodul:

Public Sub Test()
MsgBox UserForm1.ListView1.SelectedItem.Index
End Sub
Gruß
Nepumuk
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Rechtsklick in Listview Element in Excel VBA


Schritt-für-Schritt-Anleitung

Um einen Rechtsklick auf ein Element in einem ListView in Excel VBA zu erkennen, kannst du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.

  2. Füge ein UserForm hinzu: Klicke mit der rechten Maustaste auf "VBAProject" und wähle "Einfügen" > "UserForm".

  3. Füge ein ListView-Control hinzu: Ziehe das ListView-Control in dein UserForm. Stelle sicher, dass das MSCOMCTL.ocx-Control installiert ist, da es für die Verwendung des ListView nötig ist.

  4. Füge den folgenden VBA-Code ein:

    Private Sub ListView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
       If Button = vbKeyRButton Then
           Dim objListItem As ListItem
           Set objListItem = ListView1.HitTest(x, y)
           If Not objListItem Is Nothing Then
               ' Hier das Kontextmenü aufrufen
               MsgBox "Rechtsklick auf: " & objListItem.Text
           End If
       End If
    End Sub
  5. Teste das UserForm: Starte das UserForm und klicke mit der rechten Maustaste auf ein Element im ListView, um die Funktion zu testen.


Häufige Fehler und Lösungen

  • Fehler: ListView nicht sichtbar
    Lösung: Stelle sicher, dass du das MSCOMCTL.ocx-Control korrekt installiert hast und dass es im UserForm sichtbar ist.

  • Fehler: Rechtsklick wird nicht erkannt
    Lösung: Überprüfe, ob der Code im richtigen ListView-Element platziert ist und dass der Button-Wert korrekt auf vbKeyRButton geprüft wird.


Alternative Methoden

Falls du eine andere Möglichkeit zur Implementierung eines Kontextmenüs für ListView in Excel VBA suchst, kannst du das Kontextmenü manuell erstellen und es bei einem Rechtsklick anzeigen. Hier ein einfaches Beispiel:

Private Sub ListView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
    If Button = vbKeyRButton Then
        Dim objListItem As ListItem
        Set objListItem = ListView1.HitTest(x, y)
        If Not objListItem Is Nothing Then
            ' Kontextmenü anzeigen
            Dim contextMenu As Object
            Set contextMenu = CreateObject("MSForms.CommandBar")
            contextMenu.Controls.Add(Type:=msoControlButton, ID:=1).Caption = "Aktion 1"
            contextMenu.Controls.Add(Type:=msoControlButton, ID:=2).Caption = "Aktion 2"
            contextMenu.ShowPopup
        End If
    End If
End Sub

Praktische Beispiele

Hier ist ein Beispiel, um das ListView-Element in einer Excel-Anwendung zu verwenden. Angenommen, du hast eine Liste von Dateien in einem ListView, und du möchtest beim Rechtsklick auf eine Datei ein Kontextmenü anzeigen:

Private Sub ListView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
    If Button = vbKeyRButton Then
        Dim objListItem As ListItem
        Set objListItem = ListView1.HitTest(x, y)
        If Not objListItem Is Nothing Then
            ' Hier kannst du dein Kontextmenü erstellen oder eine Aktion ausführen
            MsgBox "Rechtsklick auf Datei: " & objListItem.Text
        End If
    End If
End Sub

Tipps für Profis

  • Verwende das ListView-Control effizient: Achte darauf, die ListView-Eigenschaften wie View, FullRowSelect und GridLines optimal einzustellen, um die Benutzererfahrung zu verbessern.
  • Erweiterte Fehlerbehandlung: Implementiere eine robuste Fehlerbehandlung, um unerwartete Fehler während der Ausführung zu vermeiden.
  • Nutze OnTime für asynchrone Abläufe: Mit Application.OnTime kannst du bestimmte Aufgaben zeitlich steuern, was bei komplexen Interaktionen hilfreich sein kann.

FAQ: Häufige Fragen

1. Kann ich ein Kontextmenü für mehrere ListView-Elemente verwenden?
Ja, du kannst die Logik für jedes ListView-Element entsprechend anpassen, indem du den Code in die jeweiligen Ereignisse der jeweiligen ListView-Controls einfügst.

2. Welche Excel-Version benötige ich für das ListView-Control?
Das ListView-Control ist in Excel VBA ab Version 2000 verfügbar, stelle jedoch sicher, dass alle erforderlichen Referenzen in deinem Projekt gesetzt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige