Excel VBA – 如何从variables范围填充列表框的值?

我在名为“电子邮件”的工作表中的列A中有一个名称列表

我想填充名为列A的用户窗体ListBox。但是,我不能指定一个固定的范围,因为这个列表会增长和缩小。 那么如何让用户窗体使用正确数量的项目来填充列表呢?

这是我目前正在尝试,但没有工作(我敢肯定这将是明显的一些人在这里为什么不),我也看到了另一个例子,使用一个简单的For循环,但我无法再次find例子给你看。

Private Sub UserForm_Initialize() Dim rngName As Range Dim rng1 As Range Dim rng2 As Range Dim ws As Worksheet Set ws = Worksheets("Email") Set rngName = ws.Range("A:A").Find(What:="*", LookAt:=xlWhole, MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlPrevious) Set rng1 = ws.Range("A1") On Error GoTo ErrorHandle Me.lbUsed.List = Range(rng1 & ":" & rngName).Value ErrorHandle: End Sub 

编辑:

我现在有下面的代码,但是当我加载用户表单时失败了:

 Private Sub UserForm_Initialize() Dim rngName As Range Dim rng1 As Range Set rngName = Worksheets("Email").Range("A:A").Cells.Find(What:="*", LookAt:=xlWhole, MatchCase:=False, SearchOrder:=xlByRows, SearchDirection:=xlPrevious) Set rng1 = Worksheets("Email").Range("A1:" & rngName.Address) Me.lbUsed.List = Worksheets("Email").Range(rng1).Value End Sub 

任何人都可以指出我的方向吗?

如果你想用A列中的所有项目填充你的列表框(假设它们在一个连续的范围内),你可以简单地通过修改你的代码来做到这一点:

 Private Sub UserForm_Initialize() Dim rngName As Range Dim ws As Worksheet Dim i As Integer Set ws = Worksheets("Email") For i = 1 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row Step 1 If ws.Cells(i, 1).Value <> vbNullString Then Me.lbUsed.AddItem ws.Cells(i, 1).Value Next i End Sub 

将ListBox的RowSource属性指向电子表格中的dynamic命名范围。 当您添加或删除项目的范围,列表将自动拉入新项目的列表框。 没有必要写任何代码实现这个要求。