Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Scollen funktioniert in UserForm nicht
#1
Hallo!

Ich habe folgendes Problem. Ich habe in einer UserForm eine ComboBox1.List gemacht. Leider funktioniert hier das Scrollen mit der Maus nicht. Ich muss immer rechts mit dem Balken hin und herfahren. Geht euch das auch so, oder gibt es da irgendeine Möglichkeit, dass das Scrollen hier auch funktioniert?

LG
Thomas
Excel Version 2016
Antworten Top
#2
Verwende diesen Code (den aus der Antwort, nicht den vom Fragenden):

https://stackoverflow.com/questions/4647...with-mouse
Schöne Grüße
Berni
Antworten Top
#3
ich hab mir das nun angesehen, ehrlich gesagt kenne ich mich nicht aus, was dieser code macht

mein aktueller code lautet:


Code:
Private Sub UserForm_Activate()

Detailinformationen.Caption = "Detailinformationen über ein Panel"

Dim letzte As Long
letzte = Cells(Rows.Count, "Q").End(xlUp).Row

   ActiveWorkbook.Worksheets("Top30").Sort.SortFields.Clear
   ActiveWorkbook.Worksheets("Top30").Sort.SortFields.Add Key:=Range("Q6:Q" & letzte) _
       , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   With ActiveWorkbook.Worksheets("Top30").Sort
       .SetRange Range("P6:BZ" & letzte)
       .Header = xlGuess
       .MatchCase = False
       .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
       .Apply
   End With
   
ComboBox1.List = Sheets("Top30").Range("Q6:Q" & letzte).Value
ComboBox2.List = Sheets("Top30").Range("Q6:Q" & letzte).Value

End Sub


Private Sub ComboBox1_Change()

Set suche = ThisWorkbook.Worksheets("Top30").Columns("Q").Find(what:=ComboBox1.Value, lookat:=xlWhole)

If Cells(suche.Row, "AD") = 1 Then
   MsgBox "Detailinformationen zum Panel """ & ComboBox1.Value & """:" & String(2, vbNewLine) & _
   Cells(suche.Row, "W") & String(1, vbNewLine) & _
   "erste Auszahlung nach Anmeldung erfolgte nach: " & Cells(suche.Row, "AU") & String(1, vbNewLine) & _
   Cells(suche.Row, "X") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AM") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AN") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AO") & String(1, vbNewLine) & _
   "Ø Verdienst pro Tag: € " & Format(Cells(suche.Row, "AP"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Monat: € " & Format(Cells(suche.Row, "AQ"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Jahr: € " & Format(Cells(suche.Row, "AR"), "#,##0.00") & String(2, vbNewLine) & _
   "Folgende Rangordnungen gibt es:" & String(1, vbNewLine) & _
   Cells(suche.Row, "P") & ". Rang nach Beträgen" & String(1, vbNewLine) & _
   Cells(suche.Row, "S") & ". Rang nach meisten Auszahlungen" & String(1, vbNewLine) & _
   Cells(suche.Row, "U") & ". Rang nach der Häufigkeit"

End If
End Sub
Excel Version 2016
Antworten Top
#4
Du musst doch einfach nur den Code kopieren - der obere Code in ein allgemeines Modul, der untere in das Modul der Userform.
Deinen Code um die Combobox zu befüllen musst du natürlich auch behalten.

Einzig diesen Code kannst du weglassen:
Code:
Private Sub ComboBox1_Change()
    Set myRange = Range("Q:Q")    'the range of data
    NumRows = Application.WorksheetFunction.Count(myRange)
    '////////////////////////////////////////////////////////////////
    Set ComboBoxRange = Range(Cells(4, 17), Cells(3 + NumRows, 17))
    'my data starts at range Q4, Q = 17, A=1, change this according to the range you want to change
    '////////////////////////////////////////////////////////////////
    ComboBox1.ListFillRange = ComboBoxRange.Cells.Address
    ComboBox1.DropDown
    End Sub
    'optional
Den brauchst du nicht, dafür hast du deine eigene Prozedur.
Schöne Grüße
Berni
Antworten Top
#5
und in welches allgemeine modul soll ich den code einfügen, in irgend einen?
Excel Version 2016
Antworten Top
#6
danke sehr, habs nun schon zusammengebracht
Excel Version 2016
Antworten Top
#7
Hallo noch einmal!
Jetzt funktioniert zwar das Scrollen, aber nun habe ich aber das problem, dass ich wenn nun aus der Liste etwas auswählen will, dass ein Kombilierungsfehler kommt, dass die Variable "suche" nicht definiert ist.

Anbei mein Code:


Code:
Option Explicit


   'optional
   Dim ComboBoxRange As Range
   Dim ComboBoxRange2 As Range
   Dim myRange As Range
   Dim NumRows
   
   'optional
   Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
       Call SetComboBoxHook(ComboBox1)
   End Sub

   Private Sub ComboBox1_LostFocus()
       Call RemoveComboBoxHook
   End Sub

   Private Sub ComboBox2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
       Call SetComboBoxHook(ComboBox2)
   End Sub

   Private Sub ComboBox2_LostFocus()
       Call RemoveComboBoxHook
   End Sub



Private Sub UserForm_Activate()

Detailinformationen.Caption = "Detailinformationen über ein Panel"

Dim letzte As Long
letzte = Cells(Rows.Count, "Q").End(xlUp).Row

   ActiveWorkbook.Worksheets("Top30").Sort.SortFields.Clear
   ActiveWorkbook.Worksheets("Top30").Sort.SortFields.Add Key:=Range("Q6:Q" & letzte) _
       , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   With ActiveWorkbook.Worksheets("Top30").Sort
       .SetRange Range("P6:BZ" & letzte)
       .Header = xlGuess
       .MatchCase = False
       .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
       .Apply
   End With
   
ComboBox1.List = Sheets("Top30").Range("Q6:Q" & letzte).Value
ComboBox2.List = Sheets("Top30").Range("Q6:Q" & letzte).Value

End Sub


Private Sub ComboBox1_Change()

Set suche = ThisWorkbook.Worksheets("Top30").Columns("Q").Find(what:=ComboBox1.Value, lookat:=xlWhole)

If Cells(suche.Row, "AD") = 1 Then
   MsgBox "Detailinformationen zum Panel """ & ComboBox1.Value & """:" & String(2, vbNewLine) & _
   Cells(suche.Row, "W") & String(1, vbNewLine) & _
   "erste Auszahlung nach Anmeldung erfolgte nach: " & Cells(suche.Row, "AU") & String(1, vbNewLine) & _
   Cells(suche.Row, "X") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AM") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AN") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AO") & String(1, vbNewLine) & _
   "Ø Verdienst pro Tag: € " & Format(Cells(suche.Row, "AP"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Monat: € " & Format(Cells(suche.Row, "AQ"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Jahr: € " & Format(Cells(suche.Row, "AR"), "#,##0.00") & String(2, vbNewLine) & _
   "Folgende Rangordnungen gibt es:" & String(1, vbNewLine) & _
   Cells(suche.Row, "P") & ". Rang nach Beträgen" & String(1, vbNewLine) & _
   Cells(suche.Row, "S") & ". Rang nach meisten Auszahlungen" & String(1, vbNewLine) & _
   Cells(suche.Row, "U") & ". Rang nach der Häufigkeit"

Else

If Cells(suche.Row, "AD") = 2 Then
   MsgBox "Detailinformationen zum Panel """ & ComboBox1.Value & """:" & String(2, vbNewLine) & _
   Cells(suche.Row, "W") & String(1, vbNewLine) & _
   "erste Auszahlung nach Anmeldung erfolgte nach: " & Cells(suche.Row, "AU") & String(1, vbNewLine) & _
   Cells(suche.Row, "X") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AB") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AC") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AK") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AM") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AN") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AO") & String(1, vbNewLine) & _
   Cells(suche.Row, "AS") & String(1, vbNewLine) & _
   "Ø Verdienst pro Tag: € " & Format(Cells(suche.Row, "AP"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Monat: € " & Format(Cells(suche.Row, "AQ"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Jahr: € " & Format(Cells(suche.Row, "AR"), "#,##0.00") & String(2, vbNewLine) & _
   "Folgende Rangordnungen gibt es:" & String(1, vbNewLine) & _
   Cells(suche.Row, "P") & ". Rang nach Beträgen" & String(1, vbNewLine) & _
   Cells(suche.Row, "S") & ". Rang nach meisten Auszahlungen" & String(1, vbNewLine) & _
   Cells(suche.Row, "U") & ". Rang nach der Häufigkeit"
   
Else
   
If Cells(suche.Row, "AD") >= 3 Then
   MsgBox "Detailinformationen zum Panel """ & ComboBox1.Value & """:" & String(2, vbNewLine) & _
   Cells(suche.Row, "W") & String(1, vbNewLine) & _
   "erste Auszahlung nach Anmeldung erfolgte nach: " & Cells(suche.Row, "AU") & String(1, vbNewLine) & _
   Cells(suche.Row, "X") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AB") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AC") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AE") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AH") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AK") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AM") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AN") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AO") & String(1, vbNewLine) & _
   Cells(suche.Row, "AS") & String(1, vbNewLine) & _
   "Ø Verdienst pro Tag: € " & Format(Cells(suche.Row, "AP"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Monat: € " & Format(Cells(suche.Row, "AQ"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Jahr: € " & Format(Cells(suche.Row, "AR"), "#,##0.00") & String(2, vbNewLine) & _
   "Folgende Rangordnungen gibt es:" & String(1, vbNewLine) & _
   Cells(suche.Row, "P") & ". Rang nach Beträgen" & String(1, vbNewLine) & _
   Cells(suche.Row, "S") & ". Rang nach meisten Auszahlungen" & String(1, vbNewLine) & _
   Cells(suche.Row, "U") & ". Rang nach der Häufigkeit"

End If
End If
End If
   
End Sub


Private Sub ComboBox2_Change()

Set suche2 = ThisWorkbook.Worksheets("Auszahlungen").Columns("Q").Find(what:=ComboBox2.Value, lookat:=xlWhole)

       MsgBox "Detailinformationen zum Panel """ & ComboBox2.Value & """:" & String(2, vbNewLine) & _
       Worksheets("Auszahlungen").Cells(suche2.Row, "U") & String(1, vbNewLine)
   
End Sub
Excel Version 2016
Antworten Top
#8
Ohne Beispielmappe geh ich da nicht auf die Suche...
Schöne Grüße
Berni
Antworten Top
#9
Habs nun entgültig, hab den Code an eine falsche Position eingefügt.

Code:
Private Sub UserForm_Activate()

Detailinformationen.Caption = "Detailinformationen über ein Panel"

Dim letzte As Long
letzte = Cells(Rows.Count, "Q").End(xlUp).Row

   ActiveWorkbook.Worksheets("Top30").Sort.SortFields.Clear
   ActiveWorkbook.Worksheets("Top30").Sort.SortFields.Add Key:=Range("Q6:Q" & letzte) _
       , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   With ActiveWorkbook.Worksheets("Top30").Sort
       .SetRange Range("P6:BZ" & letzte)
       .Header = xlGuess
       .MatchCase = False
       .Orientation = xlTopToBottom
       .SortMethod = xlPinYin
       .Apply
   End With
   
ComboBox1.List = Sheets("Top30").Range("Q6:Q" & letzte).Value
ComboBox2.List = Sheets("Top30").Range("Q6:Q" & letzte).Value

   'optional
   Dim ComboBoxRange As Range
   Dim myRange As Range
   Dim NumRows
   'optional
   End Sub
   
   Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
       Call SetComboBoxHook(ComboBox1)
   End Sub

   Private Sub ComboBox1_LostFocus()
       Call RemoveComboBoxHook
   End Sub
   
   Private Sub ComboBox2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
       Call SetComboBoxHook(ComboBox2)
   End Sub

   Private Sub ComboBox2_LostFocus()
       Call RemoveComboBoxHook
   End Sub

End Sub

Private Sub ComboBox1_Change()

Set suche = ThisWorkbook.Worksheets("Top30").Columns("Q").Find(what:=ComboBox1.Value, lookat:=xlWhole)

If Cells(suche.Row, "AD") = 1 Then
   MsgBox "Detailinformationen zum Panel """ & ComboBox1.Value & """:" & String(2, vbNewLine) & _
   Cells(suche.Row, "W") & String(1, vbNewLine) & _
   "erste Auszahlung nach Anmeldung erfolgte nach: " & Cells(suche.Row, "AU") & String(1, vbNewLine) & _
   Cells(suche.Row, "X") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AM") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AN") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AO") & String(1, vbNewLine) & _
   "Ø Verdienst pro Tag: € " & Format(Cells(suche.Row, "AP"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Monat: € " & Format(Cells(suche.Row, "AQ"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Jahr: € " & Format(Cells(suche.Row, "AR"), "#,##0.00") & String(2, vbNewLine) & _
   "Folgende Rangordnungen gibt es:" & String(1, vbNewLine) & _
   Cells(suche.Row, "P") & ". Rang nach Beträgen" & String(1, vbNewLine) & _
   Cells(suche.Row, "S") & ". Rang nach meisten Auszahlungen" & String(1, vbNewLine) & _
   Cells(suche.Row, "U") & ". Rang nach der Häufigkeit"

Else

If Cells(suche.Row, "AD") = 2 Then
   MsgBox "Detailinformationen zum Panel """ & ComboBox1.Value & """:" & String(2, vbNewLine) & _
   Cells(suche.Row, "W") & String(1, vbNewLine) & _
   "erste Auszahlung nach Anmeldung erfolgte nach: " & Cells(suche.Row, "AU") & String(1, vbNewLine) & _
   Cells(suche.Row, "X") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AB") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AC") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AK") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AM") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AN") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AO") & String(1, vbNewLine) & _
   Cells(suche.Row, "AS") & String(1, vbNewLine) & _
   "Ø Verdienst pro Tag: € " & Format(Cells(suche.Row, "AP"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Monat: € " & Format(Cells(suche.Row, "AQ"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Jahr: € " & Format(Cells(suche.Row, "AR"), "#,##0.00") & String(2, vbNewLine) & _
   "Folgende Rangordnungen gibt es:" & String(1, vbNewLine) & _
   Cells(suche.Row, "P") & ". Rang nach Beträgen" & String(1, vbNewLine) & _
   Cells(suche.Row, "S") & ". Rang nach meisten Auszahlungen" & String(1, vbNewLine) & _
   Cells(suche.Row, "U") & ". Rang nach der Häufigkeit"
   
Else
   
If Cells(suche.Row, "AD") >= 3 Then
   MsgBox "Detailinformationen zum Panel """ & ComboBox1.Value & """:" & String(2, vbNewLine) & _
   Cells(suche.Row, "W") & String(1, vbNewLine) & _
   "erste Auszahlung nach Anmeldung erfolgte nach: " & Cells(suche.Row, "AU") & String(1, vbNewLine) & _
   Cells(suche.Row, "X") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AB") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AC") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AE") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AH") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AK") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AM") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AN") & String(1, vbNewLine) & _
   "      " & Cells(suche.Row, "AO") & String(1, vbNewLine) & _
   Cells(suche.Row, "AS") & String(1, vbNewLine) & _
   "Ø Verdienst pro Tag: € " & Format(Cells(suche.Row, "AP"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Monat: € " & Format(Cells(suche.Row, "AQ"), "#,##0.00") & String(1, vbNewLine) & _
   "Ø Verdienst pro Jahr: € " & Format(Cells(suche.Row, "AR"), "#,##0.00") & String(2, vbNewLine) & _
   "Folgende Rangordnungen gibt es:" & String(1, vbNewLine) & _
   Cells(suche.Row, "P") & ". Rang nach Beträgen" & String(1, vbNewLine) & _
   Cells(suche.Row, "S") & ". Rang nach meisten Auszahlungen" & String(1, vbNewLine) & _
   Cells(suche.Row, "U") & ". Rang nach der Häufigkeit"

End If
End If
End If
   
End Sub


Private Sub ComboBox2_Change()

Set suche2 = ThisWorkbook.Worksheets("Auszahlungen").Columns("Q").Find(what:=ComboBox2.Value, lookat:=xlWhole)

       MsgBox "Detailinformationen zum Panel """ & ComboBox2.Value & """:" & String(2, vbNewLine) & _
       Worksheets("Auszahlungen").Cells(suche2.Row, "U") & String(1, vbNewLine)
   
End Sub
Excel Version 2016
Antworten Top


Gehe zu:


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