Reputation: 1
I have a listbox that draws information from a table in sheet 3. It then allows me to select one item on the listbox, then have the rest of the row show in a textbox above the listbox grid.
The code below will work, but would have a problem if there were a lot of items in the table. I need some assistance in creating a loop program that doesn't require multiple copy and paste of the code.
The way I tried was to use the listbox as an array.
Private Sub ListBoxSearchResults_Click()
Worksheets("Stock Data").Activate
'Verify that an item was selected
If ListBoxSearchResults.ListIndex = -1 Then
'If ListIndex is -1, nothing selected
MsgBox "Nothing was selected!"
Else
If frmProductSearch.ListBoxSearchResults.Selected(0) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a2")
TextBoxDistance.Value = Worksheets("Product Search").Range("b2")
TextBoxType.Value = Worksheets("Product Search").Range("c2")
TextBoxElevation.Value = Worksheets("Product Search").Range("D2")
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e2")
TextBoxPower.Value = Worksheets("Product Search").Range("f2")
TextBoxCalories.Value = Worksheets("Product Search").Range("g2")
TextBoxPowerOther = Worksheets("Product Search").Range("h2")
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i2")
Else
If frmProductSearch.ListBoxSearchResults.Selected(1) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a3")
TextBoxDistance.Value = Worksheets("Product Search").Range("b3")
TextBoxType.Value = Worksheets("Product Search").Range("c3")
TextBoxElevation.Value = Worksheets("Product Search").Range("D3")
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e3")
TextBoxPower.Value = Worksheets("Product Search").Range("f3")
TextBoxCalories.Value = Worksheets("Product Search").Range("g3")
TextBoxPowerOther = Worksheets("Product Search").Range("h3")
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i3")
Else
If frmProductSearch.ListBoxSearchResults.Selected(2) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a4")
TextBoxDistance.Value = Worksheets("Product Search").Range("b4")
TextBoxType.Value = Worksheets("Product Search").Range("c4")
TextBoxElevation.Value = Worksheets("Product Search").Range("D4")
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e4")
TextBoxPower.Value = Worksheets("Product Search").Range("f4")
TextBoxCalories.Value = Worksheets("Product Search").Range("g4")
TextBoxPowerOther = Worksheets("Product Search").Range("h4")
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i4")
Else
If frmProductSearch.ListBoxSearchResults.Selected(3) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a5")
TextBoxDistance.Value = Worksheets("Product Search").Range("b5")
TextBoxType.Value = Worksheets("Product Search").Range("c5")
TextBoxElevation.Value = Worksheets("Product Search").Range("D5")
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e5")
TextBoxPower.Value = Worksheets("Product Search").Range("f5")
TextBoxCalories.Value = Worksheets("Product Search").Range("g5")
TextBoxPowerOther = Worksheets("Product Search").Range("h5")
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i5")
Else
If frmProductSearch.ListBoxSearchResults.Selected(4) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a6")
TextBoxDistance.Value = Worksheets("Product Search").Range("b6")
TextBoxType.Value = Worksheets("Product Search").Range("c6")
TextBoxElevation.Value = Worksheets("Product Search").Range("D6")
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e6")
TextBoxPower.Value = Worksheets("Product Search").Range("f6")
TextBoxCalories.Value = Worksheets("Product Search").Range("g6")
TextBoxPowerOther = Worksheets("Product Search").Range("h6")
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i6")
Else
If frmProductSearch.ListBoxSearchResults.Selected(5) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a7")
TextBoxDistance.Value = Worksheets("Product Search").Range("b7")
TextBoxType.Value = Worksheets("Product Search").Range("c7")
TextBoxElevation.Value = Worksheets("Product Search").Range("D7")
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e7")
TextBoxPower.Value = Worksheets("Product Search").Range("f7")
TextBoxCalories.Value = Worksheets("Product Search").Range("g7")
TextBoxPowerOther = Worksheets("Product Search").Range("h7")
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i7")
Else
If frmProductSearch.ListBoxSearchResults.Selected(6) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a8")
TextBoxDistance.Value = Worksheets("Product Search").Range("b8")
TextBoxType.Value = Worksheets("Product Search").Range("c8")
TextBoxElevation.Value = Worksheets("Product Search").Range("D8")
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e8")
TextBoxPower.Value = Worksheets("Product Search").Range("f8")
TextBoxCalories.Value = Worksheets("Product Search").Range("g8")
TextBoxPowerOther = Worksheets("Product Search").Range("h8")
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i8")
Else
If frmProductSearch.ListBoxSearchResults.Selected(7) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a9")
TextBoxDistance.Value = Worksheets("Product Search").Range("b9")
TextBoxType.Value = Worksheets("Product Search").Range("c9")
TextBoxElevation.Value = Worksheets("Product Search").Range("D9")
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e9")
TextBoxPower.Value = Worksheets("Product Search").Range("f9")
TextBoxCalories.Value = Worksheets("Product Search").Range("g9")
TextBoxPowerOther = Worksheets("Product Search").Range("h9")
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i9")
Else
If frmProductSearch.ListBoxSearchResults.Selected(8) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a10")
TextBoxDistance.Value = Worksheets("Product Search").Range("b10")
TextBoxType.Value = Worksheets("Product Search").Range("c10")
TextBoxElevation.Value = Worksheets("Product Search").Range("D10")
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e10")
TextBoxPower.Value = Worksheets("Product Search").Range("f10")
TextBoxCalories.Value = Worksheets("Product Search").Range("g10")
TextBoxPowerOther = Worksheets("Product Search").Range("h10")
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i10")
Else
If frmProductSearch.ListBoxSearchResults.Selected(9) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a11")
TextBoxDistance.Value = Worksheets("Product Search").Range("b11")
TextBoxType.Value = Worksheets("Product Search").Range("c11")
TextBoxElevation.Value = Worksheets("Product Search").Range("D11")
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e11")
TextBoxPower.Value = Worksheets("Product Search").Range("f11")
TextBoxCalories.Value = Worksheets("Product Search").Range("g11")
TextBoxPowerOther = Worksheets("Product Search").Range("h11")
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i11")
Upvotes: 0
Views: 226
Reputation: 1474
Do you need to loop through all of .Selected
? Seems easier to use ListIndex like in the first check. Then we don't need to loop at all, just pick the index, and offset it by 2 to get the row.
Private Sub ListBoxSearchResults_Click()
Dim lIndex As Long
lIndex = frmProductSearch.ListBoxSearchResults.listIndex
Worksheets("Stock Data").Activate 'Verify that an item was selected
If lIndex = -1 Then 'If ListIndex is -1, nothing selected
MsgBox "Nothing was selected!"
Else
TextBoxDate.Value = Worksheets("Product Search").Range("a" & lIndex + 2)
TextBoxDistance.Value = Worksheets("Product Search").Range("b" & lIndex + 2)
TextBoxType.Value = Worksheets("Product Search").Range("c" & lIndex + 2)
TextBoxElevation.Value = Worksheets("Product Search").Range("D" & lIndex + 2)
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e" & lIndex + 2)
TextBoxPower.Value = Worksheets("Product Search").Range("f" & lIndex + 2)
TextBoxCalories.Value = Worksheets("Product Search").Range("g" & lIndex + 2)
TextBoxPowerOther = Worksheets("Product Search").Range("h" & lIndex + 2)
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i" & lIndex + 2)
End If
End Sub
If you HAVE to loop through them all, you should be able to use do something like:
Private Sub ListBoxSearchResults_Click()
Dim i As Long
Worksheets("Stock Data").Activate 'Verify that an item was selected
If frmProductSearch.ListBoxSearchResults.listIndex = -1 Then 'If ListIndex is -1, nothing selected
MsgBox "Nothing was selected!"
Else
For i = 0 To frmProductSearch.ListBoxSearchResults.ListCount
If frmProductSearch.ListBoxSearchResults.Selected(i) = True Then
TextBoxDate.Value = Worksheets("Product Search").Range("a" & i + 2)
TextBoxDistance.Value = Worksheets("Product Search").Range("b" & i + 2)
TextBoxType.Value = Worksheets("Product Search").Range("c" & i + 2)
TextBoxElevation.Value = Worksheets("Product Search").Range("D" & i + 2)
TextBoxHeartRate.Value = Worksheets("Product Search").Range("e" & i + 2)
TextBoxPower.Value = Worksheets("Product Search").Range("f" & i + 2)
TextBoxCalories.Value = Worksheets("Product Search").Range("g" & i + 2)
TextBoxPowerOther = Worksheets("Product Search").Range("h" & i + 2)
TextBoxCaloriesSpeed = Worksheets("Product Search").Range("i" & i + 2)
End If
Next i
End If
End Sub
Upvotes: 1