将所选项目从列表框转移到工作簿中的下一个可用单元格

Transferring selected items from Listbox to next available cell in workbook

我有一个 Listbox1,用户 select 项要移至 Listbox2。我需要将所有内容从 Listbox2 移动到 Excel.

然后应该关闭用户窗体 Me 并且应该显示另一个用户窗体(UF1、UF2 或 UF3;G3 中的公式计算应该显示哪个新窗体)。

Private Sub CommandButton2_Click()

    Dim i as integer
    Dim LastRow As Long

    LastRow = Sheets("EnteredData").Range("F" & Rows.Count).End(xlUp).Row
    
    If Me.ListBox2.ListCount = 0 Then
        MsgBox ("Please select at least one role")
    Else
        For i = 0 To ListBox2.ListCount - 1
            Sheets("EnteredData").Range("F" & LastRow).Offset(1, 0).Value = ListBox2.List(i)
            Me.ListBox2.RemoveItem i
        Next i
    End If
    Unload Me
    Sheets("EnteredData").Range("G3").Show
    
End Sub

问题:

  1. 如果 Listbox2 包含至少两项,运行-时间错误 381:无法获取列表 属性。行 Sheets("EnteredData").Range("F" & LastRow).Offset(1, 0).Value = ListBox2.List(i)
  2. 上的无效 属性 数组索引
  3. Sheets("EnteredData").Range("G3").Show 中调用的 'next' 用户表单未显示所需的表单。 Unload Me 有效,但未显示新形式(例如 UF1)。

试试这个。

因为您正在删除项目,所以循环中断 - 每当您删除任何内容时都需要向后循环。

也就是说,这会导致您的物品被退回。

为了避免向后循环 (!),而是在最后使用 Clear.

一次性删除所有项目

最后,但绝非最不重要的一点是,您需要在循环中更新 LastRow 变量以避免覆盖(尽管您可以完全放弃它)。

Private Sub CommandButton1_Click()

Dim i As Long
Dim LastRow As Long

For i = 0 To ListBox2.ListCount - 1
    LastRow = Sheets("EnteredData").Range("F" & Rows.Count).End(xlUp).Row
    Sheets("EnteredData").Range("F" & LastRow).Offset(1, 0).Value = ListBox2.List(i)
Next i

Me.ListBox2.Clear

End Sub