如何获得一个列表框,将结果返回到excel vba中的下一个空行

我有一个包含40个项目的列表框。 我想要达到的目的是让每一个被选中的每一个都在其单独的行中被返回,并且在它们之间缺less一行,因此.Row + 2

示例代码是:

 Dim LastRow As Long Dim lItem As Long LastRow = Worksheets(3).Range("B" & Rows.Count).End(xlUp).Row + 2 For lItem = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(lItem) And lItem = 0 Then Worksheets(3).Range("B" & LastRow).Value = "Example1abc" ElseIf ListBox1.Selected(lItem) And lItem = 1 Then Worksheets(3).Range("B" & LastRow).Value = "Example2def" ElseIf ListBox1.Selected(lItem) And lItem = 2 Then Worksheets(3).Range("B" & LastRow).Value = "Example3ghi" ElseIf ListBox1.Selected(lItem) And lItem = 3 Then Worksheets(3).Range("B" & LastRow).Value = "Example4jkl" ElseIf ListBox1.Selected(lItem) And lItem = 4 Then Worksheets(3).Range("B" & LastRow).Value = "Example5mno" ElseIf ListBox1.Selected(lItem) And lItem = 5 Then Worksheets(3).Range("B" & LastRow).Value = "Example6pqr" ElseIf ListBox1.Selected(lItem) And lItem = 6 Then Worksheets(3).Range("B" & LastRow).Value = "Example7stu" ElseIf ListBox1.Selected(lItem) And lItem = 7 Then Worksheets(3).Range("B" & LastRow).Value = "Example8vwx" ElseIf ListBox1.Selected(lItem) And lItem = 8 Then Worksheets(3).Range("B" & LastRow).Value = "Example9yza" ElseIf ListBox1.Selected(lItem) And lItem = 9 Then Worksheets(3).Range("B" & LastRow).Value = "Example10bcd" ElseIf ListBox1.Selected(lItem) And lItem = 10 Then Worksheets(3).Range("B" & LastRow).Value = "Example11efg" ElseIf ListBox1.Selected(lItem) And lItem = 11 Then Worksheets(3).Range("B" & LastRow).Value = "Example12hij" ElseIf ListBox1.Selected(lItem) And lItem = 12 Then Worksheets(3).Range("B" & LastRow).Value = "Example13klm" ElseIf ListBox1.Selected(lItem) And lItem = 13 Then Worksheets(3).Range("B" & LastRow).Value = "Example14nop" ElseIf ListBox1.Selected(lItem) And lItem = 14 Then Worksheets(3).Range("B" & LastRow).Value = "Example15qrs" ElseIf ListBox1.Selected(lItem) And lItem = 15 Then Worksheets(3).Range("B" & LastRow).Value = "Example16tuv" ElseIf ListBox1.Selected(lItem) And lItem = 16 Then Worksheets(3).Range("B" & LastRow).Value = "Example17wxy" ElseIf ListBox1.Selected(lItem) And lItem = 17 Then Worksheets(3).Range("B" & LastRow).Value = "Example18zab" ElseIf ListBox1.Selected(lItem) And lItem = 18 Then Worksheets(3).Range("B" & LastRow).Value = "Example19cde" ElseIf ListBox1.Selected(lItem) And lItem = 19 Then Worksheets(3).Range("B" & LastRow).Value = "Example20fgh" ElseIf ListBox1.Selected(lItem) And lItem = 20 Then Worksheets(3).Range("B" & LastRow).Value = "Example21ijk" ElseIf ListBox1.Selected(lItem) And lItem = 21 Then Worksheets(3).Range("B" & LastRow).Value = "Example22lmn" ElseIf ListBox1.Selected(lItem) And lItem = 22 Then Worksheets(3).Range("B" & LastRow).Value = "Example23opq" ElseIf ListBox1.Selected(lItem) And lItem = 23 Then Worksheets(3).Range("B" & LastRow).Value = "Example24rst" ElseIf ListBox1.Selected(lItem) And lItem = 24 Then Worksheets(3).Range("B" & LastRow).Value = "Example25uvw" ElseIf ListBox1.Selected(lItem) And lItem = 25 Then Worksheets(3).Range("B" & LastRow).Value = "Example26xyz" ElseIf ListBox1.Selected(lItem) And lItem = 26 Then Worksheets(3).Range("B" & LastRow).Value = "Example27abc" ElseIf ListBox1.Selected(lItem) And lItem = 27 Then Worksheets(3).Range("B" & LastRow).Value = "Example28def" ElseIf ListBox1.Selected(lItem) And lItem = 28 Then Worksheets(3).Range("B" & LastRow).Value = "Example29ghi" ElseIf ListBox1.Selected(lItem) And lItem = 29 Then Worksheets(3).Range("B" & LastRow).Value = "Example30jkl" ElseIf ListBox1.Selected(lItem) And lItem = 30 Then Worksheets(3).Range("B" & LastRow).Value = "Example31mno" ElseIf ListBox1.Selected(lItem) And lItem = 31 Then Worksheets(3).Range("B" & LastRow).Value = "Example32pqr" ElseIf ListBox1.Selected(lItem) And lItem = 32 Then Worksheets(3).Range("B" & LastRow).Value = "Example33stu" ElseIf ListBox1.Selected(lItem) And lItem = 33 Then Worksheets(3).Range("B" & LastRow).Value = "Example34vwx" ElseIf ListBox1.Selected(lItem) And lItem = 34 Then Worksheets(3).Range("B" & LastRow).Value = "Example35yza" ElseIf ListBox1.Selected(lItem) And lItem = 35 Then Worksheets(3).Range("B" & LastRow).Value = "Example36bcd" ElseIf ListBox1.Selected(lItem) And lItem = 36 Then Worksheets(3).Range("B" & LastRow).Value = "Example37efg" ElseIf ListBox1.Selected(lItem) And lItem = 37 Then Worksheets(3).Range("B" & LastRow).Value = "Example38hij" ElseIf ListBox1.Selected(lItem) And lItem = 38 Then Worksheets(3).Range("B" & LastRow).Value = "Example39klm" ElseIf ListBox1.Selected(lItem) And lItem = 39 Then Worksheets(3).Range("B" & LastRow).Value = "Example40nop" End If Next 

这显然只会返回最后一个select,而不是其他人。
如果不使代码长度过长,我需要input什么内容,如下例所示?

 Dim LastRow As Long Dim lItem As Long LastRow = Worksheets(3).Range("B" & Rows.Count).End(xlUp).Row + 2 For lItem = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(lItem) And lItem = 0 Then Worksheets(3).Range("B" & LastRow).Value = "Example1abc" ElseIf ListBox1.Selected(lItem) And lItem = 1 Then Worksheets(3).Range("B" & LastRow).Value = "Example2def" ElseIf ListBox1.Selected(lItem) And lItem = 2 Then Worksheets(3).Range("B" & LastRow).Value = "Example3ghi" ElseIf ListBox1.Selected(lItem) And lItem = 3 Then Worksheets(3).Range("B" & LastRow).Value = "Example4jkl" '''''''''''''''''''''''''''''''''''''''' ''' etc as above... ''' ''' then for more than one selected: ''' '''''''''''''''''''''''''''''''''''''''' ElseIf ListBox1.Selected(lItem) And lItem = 1 & 2 Then Worksheets(3).Range("B" & LastRow).Value = "Example1abc" Worksheets(3).Range("B" & LastRow +2).Value = "Example2def" ElseIf ListBox1.Selected(lItem) And lItem = 1 & 3 Then Worksheets(3).Range("B" & LastRow).Value = "Example1abc" Worksheets(3).Range("B" & LastRow +2).Value = "Example3ghi" ''''''''''''''''' ''' etcetc... ''' ''''''''''''''''' End If Next 

这显然是一个非常漫长和乏味的做法,特别是40! (8.1591528324789773434561126959612e + 47)选项!
我希望这是明确的。

我已经search,但似乎无法在其他地方find类似的情况。

如果"Example1abc""Example2def" ,….不同,那么列表中的值本身就可以如下所示:

 Option Explicit Private Sub CommandButton1_Click() Dim lItem As Long Dim sResultArr As Variant sResultArr = Array("Example1abc", "Example2def", "Example3ghi", "Example4jkl", ...) '<--| hard code the values to be associated with list items With Worksheets(3) For lItem = 0 To Me.ListBox1.ListCount - 1 If Me.ListBox1.Selected(lItem) Then .Cells(.Rows.Count, "E").End(xlUp).Offset(2) = sResultArr(lItem) Next End With End Sub 

否则,即"Example1abc""Example2def" ,….是列表中的值本身,那么你可以去像这样:

 Private Sub CommandButton1_Click() Dim lItem As Long With Worksheets(3) For lItem = 0 To Me.ListBox1.ListCount - 1 If Me.ListBox1.Selected(lItem) Then .Cells(.Rows.Count, "E").End(xlUp).Offset(2) = Me.ListBox1.List(lItem) Next End With End Sub 

您不需要对列表项值进行编码,您可以像这样读取它:

  Me.ListBox1.List(0)'/ Returns the first item 

Private Sub CommandButton1_Click()

  Dim lctr As Long Dim lRow As Long lRow = 1 For lctr = 0 To Me.ListBox1.ListCount - 1 If Me.ListBox1.Selected(lctr) Then Debug.Print Me.ListBox1.List(lctr) Worksheets("Sheet1").Cells(lRow, 2) = Me.ListBox1.List(lctr) lRow = lRow + 2 End If Next End Sub