这应该很容易(也许是),但我看不到。我希望有人能尽快发现问题并帮助我解决。
所以我有一个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)。
有人可以帮我理解和解决这两个问题吗?
非常感谢您的支持。
尝试一下。
因为在循环中断时要删除项目-每当删除任何内容时都需要向后循环。
也就是说,这将导致您的商品向后转移。
为了回避,我们不会向后循环(!),而是使用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