【问题标题】:Excel VBA - How do I populate the values of a ListBox from a variable range?Excel VBA - 如何从变量范围填充 ListBox 的值?
【发布时间】:2014-02-24 19:48:39
【问题描述】:

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

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

这是我目前正在尝试但不起作用的方法(我相信这里的某些人会明白为什么不这样做),我还看到了另一个使用简单 For 循环的示例,但我找不到再举一个例子给你看。

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

谁能指出我正确的方向?

【问题讨论】:

    标签: vba excel listbox listboxitem


    【解决方案1】:

    如果您想用 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
    

    【讨论】:

    • 使用.End(xlDown) 非常不可靠。如果A1 为空会怎样?这可能很有趣:stackoverflow.com/questions/11169445/…
    • 完美地做到了!你能解释一下这部分吗?: Set rngName = ws.Range("A1", ws.Range("A1").End(xlDown))
    • @simoco 确实如此,但这就是为什么我添加了关于它是 continuous range 的部分。
    • @Petay87 当您站在单元格A1 中时,它的作用类似于键盘快捷键 ctrl+shift+down。所以它说明了从 A1 和向下的范围。但正如@simoco 正确指出的那样,这只能在连续范围内按预期工作。
    • @Petay87 我已经更新了代码,以便它只会添加来自非空白单元格的项目。
    【解决方案2】:

    将 ListBox 的 RowSource 属性指向电子表格中的动态命名范围。当您向范围添加或删除项目时,列表将自动将新项目拉入列表框。无需编写任何代码来实现此要求。

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 2015-01-31
      • 1970-01-01
      相关资源
      最近更新 更多