Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Listbox not returning data correctly in excel vba

Tags:

excel

vba

listbox

I have a listbox in a userform with 13 options, similar to: This is for demonstration purposes only

What I am tying to get it to do is that when an item is chosen, it returns a specific result. By this I mean: chicken leg as 'a', nugget = 'b', burger = 'c', etc...

This is the code I've come up with:

Private Sub CommandButton1_Click()
Dim lItem As Long
    For lItem = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "a"
    ElseIf ListBox1.Selected(lItem) = 1 Then
        Worksheets(3).Range("E1").Value = "b"
    ElseIf ListBox1.Selected(lItem) = 2 Then
        Worksheets(3).Range("E1").Value = "c"
    ElseIf ListBox1.Selected(lItem) = 3 Then
        Worksheets(3).Range("E1").Value = "d"
    ElseIf ListBox1.Selected(lItem) = 4 Then
        Worksheets(3).Range("E1").Value = "e"
    ElseIf ListBox1.Selected(lItem) = 5 Then
        Worksheets(3).Range("E1").Value = "f"
    ElseIf ListBox1.Selected(lItem) = 6 Then
        Worksheets(3).Range("E1").Value = "fs"
    ElseIf ListBox1.Selected(lItem) = 7 Then
        Worksheets(3).Range("E1").Value = "g"
    ElseIf ListBox1.Selected(lItem) = 8 Then
        Worksheets(3).Range("E1").Value = "gs" 'its not a straight sequence as such
    ElseIf ListBox1.Selected(lItem) = 9 Then
        Worksheets(3).Range("E1").Value = "h"
    ElseIf ListBox1.Selected(lItem) = 10 Then
        Worksheets(3).Range("E1").Value = "i"
    ElseIf ListBox1.Selected(lItem) = 11 Then
        Worksheets(3).Range("E1").Value = "j"
    ElseIf ListBox1.Selected(lItem) = 12 Then
        Worksheets(3).Range("E1").Value = "js"
    '...................................................
    'from here on it is for when two items are selected'
    ''''''''''''''''''''''''''''''''''''''''''''''''''''
    ElseIf ListBox1.Selected(lItem) = 1 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "ab"
    ElseIf ListBox1.Selected(lItem) = 2 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "ac"
    ElseIf ListBox1.Selected(lItem) = 3 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "ad"
    ElseIf ListBox1.Selected(lItem) = 4 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "ae"
    ElseIf ListBox1.Selected(lItem) = 5 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "af"
    ElseIf ListBox1.Selected(lItem) = 6 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "afs"
    ElseIf ListBox1.Selected(lItem) = 7 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "ag"
    ElseIf ListBox1.Selected(lItem) = 8 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "ags"
    ElseIf ListBox1.Selected(lItem) = 9 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "ah"
    ElseIf ListBox1.Selected(lItem) = 10 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "ai"
    ElseIf ListBox1.Selected(lItem) = 11 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "aj"
    ElseIf ListBox1.Selected(lItem) = 12 And ListBox1.Selected(lItem) = 0 Then
        Worksheets(3).Range("E1").Value = "ajs"
    Else
    '...................................................
    ' more code for many more selections               '
    ' i stopped when i realised it wasn't quite working'
    ''''''''''''''''''''''''''''''''''''''''''''''''''''
    End If
Next
End Sub

I hope it is clear what I am trying to achieve.

The problem is that, whatever is selected, only returns 'a', no matter how many are selected or whether 'chicken leg' is even selected. What is missing?

I suspect that it's something fairly fundamental, as I am new to vba :)

Another way I have also tried is:

Private Sub CommandButton1_Click()
    If ListBox1.Value = "chicken leg" Then
        Worksheets(3).Range("E1").Value = "a"
    ElseIf ListBox1.Value = "nugget" Then
        Worksheets(3).Range("E1").Value = "b"
    ElseIf ListBox1.Value = "burger" Then
        Worksheets(3).Range("E1").Value = "c"
    ElseIf ListBox1.Value = "sandwich" Then
        Worksheets(3).Range("E1").Value = "d"
    Else
End if
End sub

But that didn't work at all...

Can someone please help??

Thanks

like image 429
StanB Avatar asked Jan 25 '26 05:01

StanB


1 Answers

For a ListBox with fmMultiSelectMulti the following should work:

Private Sub CommandButton1_Click()
 Dim sResult As String
 Dim lItem As Long
 For lItem = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(lItem) And lItem = 0 Then
        sResult = sResult & "a"
    ElseIf ListBox1.Selected(lItem) And lItem = 1 Then
        sResult = sResult & "b"
    ElseIf ListBox1.Selected(lItem) And lItem = 2 Then
        sResult = sResult & "c"
    ElseIf ListBox1.Selected(lItem) And lItem = 3 Then
        sResult = sResult & "d"
    ElseIf ListBox1.Selected(lItem) And lItem = 4 Then
        sResult = sResult & "e"
    ElseIf ListBox1.Selected(lItem) And lItem = 5 Then
        sResult = sResult & "f"
    ElseIf ListBox1.Selected(lItem) And lItem = 6 Then
        sResult = sResult & "fs"
    ElseIf ListBox1.Selected(lItem) And lItem = 7 Then
        sResult = sResult & "g"
    ElseIf ListBox1.Selected(lItem) And lItem = 8 Then
        sResult = sResult & "gs" 'its not a straight sequence as such
    ElseIf ListBox1.Selected(lItem) And lItem = 9 Then
        sResult = sResult & "h"
    ElseIf ListBox1.Selected(lItem) And lItem = 10 Then
        sResult = sResult & "i"
    ElseIf ListBox1.Selected(lItem) And lItem = 11 Then
        sResult = sResult & "j"
    ElseIf ListBox1.Selected(lItem) And lItem = 12 Then
        sResult = sResult & "js"
    End If
 Next
 Worksheets(3).Range("E1").Value = sResult
End Sub
like image 183
Axel Richter Avatar answered Jan 26 '26 20:01

Axel Richter



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!