【问题标题】:How to populate a listbox with a dynamic range of cells in VBA/Excel如何在 VBA/Excel 中使用动态范围的单元格填充列表框
【发布时间】:2021-10-19 16:55:39
【问题描述】:

我已经解决了几个类似的问题,希望能解决我的答案,但我一直在努力将具体问题与我的场景联系起来。

我有一个工作表,其中有一个打开用户表单的按钮 - 此代码在标准模块中运行。一旦用户表单打开,我想用来自可能随每个电子表格而变化的单元格范围内的数据填充一个列表框。

Here is the userform:

我知道我已经成功地抓取了我的动态单元格范围,因为我已经能够使用我的代码选择范围。这是我的动态范围代码:

Private Sub UserForm_Initialize()

Dim xrange, newStartCell As Range
Dim last_col As Integer
Dim rng As Range

Me.StartUpPosition = 0
Me.Top = 300
Me.Left = 475

' find cell with row header "cygnet code"
Set xrange = Cells.Find(What:="cygnet code", After:=ActiveCell, LookIn:=xlFormulas2, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

Set newStartCell = xrange.Offset(, 1)

'This line gets the last column
last_col = Cells(4, Columns.Count).End(xlToLeft).Column

With ThisWorkbook.Sheets("C&E")
    Set rng = .Range(.Cells(newStartCell.Row, newStartCell.Column), .Cells(newStartCell.Row, last_col))
End With

With Me.ListBox1
    .List = rng.Value
End With

End Sub

我不知道它是否与在初始化函数中运行此代码有关,或者我抓取范围的方式与列表框不兼容?在任何一种情况下,代码运行时都不会出现“错误”,但列表框保持空白(它会添加一个空白行)。

这是我用来测试选择工具工作的代码:

    With ThisWorkbook.Sheets("C&E")
    Set rng = .Range(.Cells(newStartCell.Row, newStartCell.Column), .Cells(newStartCell.Row, last_col))
    .Range(.Cells(newStartCell.Row, newStartCell.Column), .Cells(newStartCell.Row, last_col)).Select
    End With

提前感谢您的帮助!

【问题讨论】:

    标签: excel vba dynamic listbox


    【解决方案1】:

    您不会从声明工作表开始查找xrangelast_col。我会缩小xrange 的搜索范围,而不是查看每个单元格,但您确实需要该工作表。

    Private Sub UserForm_Initialize()
    
        Dim xrange, newStartCell As Range
        Dim last_col As Long
        Dim rng As Range
        Dim Sht As Worksheet
        
        Me.StartUpPosition = 0
        Me.Top = 300
        Me.Left = 475
        
        Set Sht = ThisWorkbook.Worksheets("C&E")
        
        ' find cell with row header "cygnet code"
        Set xrange = Sht.Cells.Find(What:="cygnet code", After:=ActiveCell, LookIn:=xlFormulas2, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
        
        Set newStartCell = xrange.Offset(, 1)
        
        'This line gets the last column
        last_col = Sht.Cells(4, Columns.Count).End(xlToLeft).Column
        
        Set rng = Sht.Range(Sht.Cells(newStartCell.Row, newStartCell.Column), Sht.Cells(newStartCell.Row, last_col))
        
        With Me.ListBox1
            .List = rng.Value
        End With
    

    结束子

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      • 2012-08-17
      • 1970-01-01
      • 2023-03-19
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多