将选定的项目从列表框中传输到工作簿中的下一个可用单元格中

问题描述 投票:0回答:1

这应该很容易(也许是),但我看不到。我希望有人能尽快发现问题并帮助我解决。

所以我有一个Listbox1,用户可以选择要移入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:无法获取List属性。 Sheets("EnteredData").Range("F" & LastRow).Offset(1, 0).Value = ListBox2.List(i)行上的属性数组索引无效2)在Sheets("EnteredData").Range("G3").Show中调用的“下一个”用户表单未显示所需的表单。 Unload Me有效,但是未显示新格式(例如UF1)。

有人可以帮我理解和解决这两个问题吗?

非常感谢您的支持。

excel vba userform
1个回答
0
投票

尝试一下。

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

也就是说,这将导致您的商品向后转移。

为了回避,我们不会向后循环(!),而是使用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
© www.soinside.com 2019 - 2024. All rights reserved.