Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1820to1824
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Link wird in ListBox nicht Angezeigt
16.03.2021 11:11:53
oraculix
Hallo
Ich habe eine Listbox1 in Userform1 in der mir Spalte A und B angezeigt werden.
In der Tabelle in Spalte " A " befinden sich Hyperlinks die jederzeit anklicken kann.
Frage: Wie kann ich in der Lstbox1 Hyperlinks anklicken?
'Tabelle "FilmDB" Spalte A und B in Listbox1 anzeigen
Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 2
.ColumnWidths = "4cm;4cm"
.ColumnHeads = False
ListBox1.RowSource = "FilmDB!A1:B5000"
End With
End Sub


22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Link wird in ListBox nicht Angezeigt
16.03.2021 11:24:36
Daniel
Hi
Kommt darauf an, wie dein Hyperlink hinterlegt ist.
Steht die vollständige Adresse in Spalte A, müsste es folgender Code im Click-Event der Listbox tun:
ThisWorkbook.FollowHyperlink Listbox1.List(Listbox1.Listindex, 0)
Gruß Daniel

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 11:33:23
oraculix
Danke für die schnelle Antwort
Leider tut sich nichts wenn ich in der Listbox klicke.
In der Tabelle "FilmDB" in Spalte "A" befinden sich links zur Festplatte.
Beispiel: Rambo sieht genau so aus wie geschrieben.

Anzeige
AW: Link wird in ListBox nicht Angezeigt
16.03.2021 11:57:10
Daniel
Wie gesagt, mein Vorschlag benötigt die Linkadresse in Spalte A als Zelltext ("C:\....MPG") Ein vollständiger Hyperlink ist nicht erforderlich.
Wenn in der Zelle schon ein Hyperlink vorhanden ist, bei dem ggf angezeigter Text und Linkadresse unterschiedlich sind, dann schau dir mal den Vorschlag von Nepumuk an.
Gruß Daniel

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 11:34:41
Nepumuk
Hallo,
so:
Private Sub ListBox1_Click()
    Call ThisWorkbook.FollowHyperlink(Address:= _
        Worksheets("FilmDB").Cells(ListBox1.ListIndex + 1, 1).Hyperlinks(1).Address)
End Sub

Gruß
Nepumuk

Anzeige
AW: Link wird in ListBox nicht Angezeigt
16.03.2021 12:06:09
oraculix
Danke
Es kommt zumindest kein Fehler mehr aber doppelklick tut sich nichts.

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 12:09:11
Nepumuk
Hallo,
ein einfacher Klick sollte genügen.
Gruß
Nepumuk

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 12:14:04
oraculix
Genial jetzt gehts. VIELEN DANK DU VBA GOTT
Hatte multiselect 1 jett auf 0 gestellt und es geht juhuuuuuu!
was muss ich einstellen das ich in der ListBox1 scrollen kann das geht nähmlich nicht.

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 12:26:02
Nepumuk
Hallo,
im Modul des Userforms:
Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Call HookMouse(ListBox1)
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Call UnhookMouse
End Sub

In einem Standardmodul (Menüleiste im VBA-Editor - Einfügen - Modul):
Option Explicit
Option Private Module

#If Win64 Then
Private Declare PtrSafe Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongPtrA" ( _
    ByVal hwnd As LongPtr, _
    ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function WindowFromPoint Lib "user32.dll" ( _
    ByVal point As LongLong) As LongPtr
#Else
Private Declare PtrSafe Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _
    ByVal hwnd As LongPtr, _
    ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function WindowFromPoint Lib "user32.dll" ( _
    ByVal xPoint As Long, _
    ByVal yPoint As Long) As LongPtr
#End If

Private Declare PtrSafe Sub RtlMoveMemory Lib "kernel32.dll" ( _
    ByRef Destination As Any, _
    ByRef Source As Any, _
    ByVal Length As LongPtr)
Private Declare PtrSafe Function SetWindowsHookExA Lib "user32.dll" ( _
    ByVal idHook As Long, _
    ByVal lpfn As LongPtr, _
    ByVal hmod As LongPtr, _
    ByVal dwThreadId As Long) As LongPtr
Private Declare PtrSafe Function CallNextHookEx Lib "user32.dll" ( _
    ByVal hHook As LongPtr, _
    ByVal ncode As Long, _
    ByVal wParam As LongPtr, _
    ByRef lParam As Any) As LongPtr
Private Declare PtrSafe Function UnhookWindowsHookEx Lib "user32.dll" ( _
    ByVal hHook As LongPtr) As Long
Private Declare PtrSafe Function GetCursorPos Lib "user32.dll" ( _
    ByRef lpPoint As POINTAPI) As Long
Private Declare PtrSafe Function GetKeyState Lib "user32.dll" ( _
    ByVal nVirtKey As Long) As Integer
Private Declare PtrSafe Function PostMessageA Lib "user32.dll" ( _
    ByVal hwnd As LongPtr, _
    ByVal wMsg As Long, _
    ByVal wParam As LongPtr, _
    ByVal lParam As LongPtr) As Long

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Type MOUSEHOOKSTRUCT
    pt As POINTAPI
    hwnd As LongPtr
    wHitTestCode As Long
    dwExtraInfo As LongPtr
End Type

Private Const WH_MOUSE_LL As Long = 14&
Private Const WM_MOUSEWHEEL As LongPtr = &H20A
Private Const HC_ACTION As Long = 0&
Private Const GWL_HINSTANCE As Long = -6&
Private Const WM_KEYDOWN As Long = &H100

Private llngptrMouseHook As LongPtr
Private llngptrControlHwnd As LongPtr
Private llngPage As Long
Private lblnHook As Boolean
Private lobjScrollObject As Object

Public Sub HookMouse(ByRef probjScrollObject As Object, Optional ByVal opvlngPage As Long)
Dim lngptrHinstance As LongPtr
Dim lngptrHwndUnderCursor As LongPtr
Dim udtPoint As POINTAPI
llngPage = opvlngPage
Call GetCursorPos(udtPoint)
#If Win64 Then
    lngptrHwndUnderCursor = WindowFromPoint(PointToLongLong(udtPoint))
    #Else
    lngptrHwndUnderCursor = WindowFromPoint(udtPoint.X, udtPoint.Y)
    #End If
    If llngptrControlHwnd <> lngptrHwndUnderCursor Then
        Call UnhookMouse
        Set lobjScrollObject = probjScrollObject
        llngptrControlHwnd = lngptrHwndUnderCursor
        lngptrHinstance = GetWindowLong(llngptrControlHwnd, GWL_HINSTANCE)
        If Not lblnHook Then
            llngptrMouseHook = SetWindowsHookExA(WH_MOUSE_LL, AddressOf MouseProc, lngptrHinstance, 0&)
            lblnHook = llngptrMouseHook <> 0
        End If
    End If
End Sub

Public Sub UnhookMouse()
    If lblnHook Then
        Call UnhookWindowsHookEx(llngptrMouseHook)
        Set lobjScrollObject = Nothing
        llngptrMouseHook = 0
        llngptrControlHwnd = 0
        lblnHook = False
    End If
End Sub

Private Function MouseProc(ByVal pvlngCode As Long, ByVal pvlngptrParam As LongPtr, ByRef prudtParam As MOUSEHOOKSTRUCT) As LongPtr
Dim lngptrHwndUnderCursor As LongPtr
On Error GoTo err_exit
If pvlngCode = HC_ACTION Then
    #If Win64 Then
        lngptrHwndUnderCursor = WindowFromPoint(PointToLongLong(prudtParam.pt))
        #Else
        lngptrHwndUnderCursor = WindowFromPoint(prudtParam.pt.X, prudtParam.pt.Y)
        #End If
        If lngptrHwndUnderCursor = llngptrControlHwnd Then
            If pvlngptrParam = WM_MOUSEWHEEL Then
                If TypeOf lobjScrollObject Is MSForms.ListBox Or TypeOf lobjScrollObject Is MSForms.ComboBox Then
                    With lobjScrollObject
                        If GetKeyState(vbKeyControl) >= 0 Then
                            If prudtParam.hwnd > 0 Then
                                If .TopIndex > 0 Then
                                    If .TopIndex > 3 Then
                                        .TopIndex = .TopIndex - 3
                                    Else
                                        .TopIndex = 0
                                    End If
                                End If
                            Else
                                .TopIndex = .TopIndex + 3
                            End If
                        Else
                            If TypeOf lobjScrollObject Is MSForms.ListBox Then
                                If prudtParam.hwnd > 0 Then
                                    Call PostMessageA(llngptrControlHwnd, WM_KEYDOWN, vbKeyLeft, 0)
                                Else
                                    Call PostMessageA(llngptrControlHwnd, WM_KEYDOWN, vbKeyRight, 0)
                                End If
                            End If
                        End If
                    End With
                ElseIf TypeOf lobjScrollObject Is MSForms.MultiPage Then
                    With lobjScrollObject.Pages(llngPage)
                        If GetKeyState(vbKeyControl) >= 0 Then
                            If prudtParam.hwnd > 0 Then
                                If .ScrollTop > 0 Then
                                    .ScrollTop = .ScrollTop - 30
                                Else
                                    .ScrollTop = 0
                                End If
                            Else
                                .ScrollTop = .ScrollTop + 30
                            End If
                        Else
                            If prudtParam.hwnd > 0 Then
                                If .ScrollLeft > 0 Then
                                    .ScrollLeft = .ScrollLeft - 30
                                Else
                                    .ScrollLeft = 0
                                End If
                            Else
                                .ScrollLeft = .ScrollLeft + 30
                            End If
                        End If
                    End With
                ElseIf TypeOf lobjScrollObject Is MSForms.UserForm Or TypeOf lobjScrollObject Is MSForms.Frame Then
                    With lobjScrollObject
                        If GetKeyState(vbKeyControl) >= 0 Then
                            If prudtParam.hwnd > 0 Then
                                If .ScrollTop > 0 Then
                                    .ScrollTop = .ScrollTop - 30
                                Else
                                    .ScrollTop = 0
                                End If
                            Else
                                .ScrollTop = .ScrollTop + 30
                            End If
                        Else
                            If prudtParam.hwnd > 0 Then
                                If .ScrollLeft > 0 Then
                                    .ScrollLeft = .ScrollLeft - 30
                                Else
                                    .ScrollLeft = 0
                                End If
                            Else
                                .ScrollLeft = .ScrollLeft + 30
                            End If
                        End If
                    End With
                End If
                Exit Function
            End If
        Else
            Call UnhookMouse
        End If
    End If
    MouseProc = CallNextHookEx(llngptrMouseHook, pvlngCode, pvlngptrParam, ByVal prudtParam)
    Exit Function
    err_exit:
    Call UnhookMouse
End Function

#If Win64 Then
Private Function PointToLongLong(ByRef prudtPoint As POINTAPI) As LongLong
    Dim lnglngTemp As LongLong
    Dim lngprtLength As LongPtr
    lngprtLength = LenB(lnglngTemp)
    If LenB(prudtPoint) = lngprtLength Then Call RtlMoveMemory(PointToLongLong, prudtPoint, lngprtLength)
    PointToLongLong = lnglngTemp
End Function
#End If

Gruß
Nepumuk

Anzeige
AW: Link wird in ListBox nicht Angezeigt
16.03.2021 12:45:34
oraculix
wenn ich das so mache wie du postest dann kommt eine fehlermeldung.
Private Sub UserForm_Activate() wird gelb markiert

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 12:51:44
Nepumuk
Hallo,
poste mal den Code des Userforms.
Gruß
Nepumuk

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 13:20:08
oraculix
Hatte zu viele alte macros hab die alle gelöscht.
letzte meldung
interner fehler in modul 1 "Private Type MOUSEHOOKSTRUCT"
hier die gewünschte userform
'Tabelle FilmDB Spalte A und B in Listbox1 anzeigen
Private Sub UserForm_Initialize()
With ListBox1
.ColumnCount = 2
.ColumnWidths = "4cm;4cm"
.ColumnHeads = False
ListBox1.RowSource = "FilmDB!A1:B5000"
End With
End Sub


Anzeige
AW: Link wird in ListBox nicht Angezeigt
16.03.2021 13:31:05
Nepumuk
Hallo,
kann ich nicht nachvollziehen. Lade mal die Mappe hoch.
Gruß
Nepumuk

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 13:41:39
oraculix
geht leider nicht die mappe ist zu gross auch mit zip
habe mal alle unötigen codes gelöscht und versuche ständig deinen neuen code einzuspielen leider ohne erfolg da ist eben der vorhinn genannte fehler der kommt immer wieder

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 15:02:30
oraculix
Vielen Dank jetz gehts bekomme nur fehler wenn ich den film nicht öffnen möchte also abreche
aber
1.mouse scrollen geht nicht
2.das mit der einstellung mit doppelklick statt einfachklick auf link finde ich nicht.

Anzeige
AW: Link wird in ListBox nicht Angezeigt
16.03.2021 15:08:18
Nepumuk
Hallo,
1. Auch in meiner Mustermappe nicht?
2. So:
Private Sub ListBox1_Click()
    On Error Resume Next
    Call ThisWorkbook.FollowHyperlink(Address:= _
        Worksheets("FilmDB").Cells(ListBox1.ListIndex + 1, 1).Hyperlinks(1).Address)
End Sub

Gruß
Nepumuk

Anzeige
AW: ListBox.enabled=true oder false?
16.03.2021 12:14:05
JoWE

AW: ListBox.enabled=true oder false?
16.03.2021 12:24:31
oraculix
antwort auf deine frage:True
geht schon alles nur wenn ich auf abrechen klicke kommt ein fehler.
es kommt ja diese bekannte windofs box es könnte gefährlich sein wenn sie diese datei öffnen.
aber ist halb so schlimm da muss ich mir was suchen was die fehlermeldung abricht wenn ich auf abbrechen klicke.
ausser du hast was im ärmel zb wenn windofs abgebrochen dann zurück oder so.
danke dir

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 12:19:10
Daniel
Wenn du erst bei Doppelklick den Film öffnen willst, dann musst du den Code ins BeforDouble-Klick-Event schreiben.
Das sollte auch funktionieren.
Gruß Daniel

Anzeige
AW: Link wird in ListBox nicht Angezeigt
16.03.2021 13:36:16
oraculix
Hallo Danke für den Tipp den könnte ich gut gebrauchen.
BeforDouble-Klick wo wie soll ich den einfügen?

AW: Link wird in ListBox nicht Angezeigt
16.03.2021 13:41:43
Daniel
Hi
du hast im VBA-Editor über dem Codefenster zwei Comboboxen.
in der Linken werden dir die vorhandenen Objekte (z.B. die Steuerlemende der Userdform, die du gerade bearbeitest) angezeigt, in der rechen dann die zum gewählten Objekt vorhanden Makros.
Dabei sind alle Event-Makros, also die die bei bestimmten Aktionen automatisch laufen.
Wenn du in der Combobox auf so ein Makro klickst, wird es im Codefenster angelegt und du kannst den Code da rein schreiben.
die Kopfzeile des Makros sollte nicht verändert werden, nur dann ist ein reguläres Funktionieren garantiert.
Gruß Daniel
Anzeige

354 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige