列表框没有在excel vba中正确返回数据

我有一个用户窗体中有13个选项的列表框,类似于: 这仅用于演示目的

我要做的是,当一个项目被选中时,它会返回一个特定的结果。 我的意思是:鸡腿是'a',金块='b',汉堡='c'等等。

这是我提出的代码:

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 

我希望这是我想要达到的目标。

问题在于,无论select了多less,还是select了“鸡腿”,无论select什么,只返回“a”。 什么不见​​了?

我怀疑这是相当基础的东西,因为我是新的vba 🙂

我也试过的另一种方法是:

 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 

但是这根本不起作用

有人可以帮忙吗?

谢谢

对于带有fmMultiSelectMulti的ListBox,以下内容应该可以工作:

 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 

这应该工作,并 …:

 Option Explicit Private Sub CommandButton1_Click() Dim sResult As String Dim lItem As Long Dim sResultArr As Variant sResultArr = Array("a", "b", "c", "d", "e", "f", "fs", "g", "gs", "h", "i", "j", "js") For lItem = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(lItem) Then sResult = sResult & sResultArr(lItem) Next Worksheets(3).Range("E1").value = sResult End Sub 
  ListBox1.Selected(lItem) 

仅返回true / false,因此将每个if的第一个代码更改为ListBox1.Selected(lItem)= 0