【问题标题】:Use VBA to display select range values in Excel listbox使用 VBA 在 Excel 列表框中显示选择范围值
【发布时间】:2018-10-22 09:08:42
【问题描述】:

我尝试在 Excel 2016 中将不连续的行单元格范围显示到 2 列列表框中,但没有成功。我使用的最新建议是将范围值移动到数组中并使用数组写入列表框。
我使用 FindAll 函数搜索大名称范围以提取满足字符串条件的行。我最终得到一个 28 行 x 4 列的非连续范围(例如:A3:D3, A7:D7, A15:D15, A25:D25, ...)。

我的问题是在第二个循环周期的顶部:

Dim result As Range, item As Range
Dim Arr() As String, sStr As String
sStr = "A3:D3","A7:D7","A15:D15","A25:D25"
Set result = Range(sStr)
i = 0
For Each item In result
   ReDim Preserve Arr(i+1, 4)
   Arr(i , 1) = item(1, 1).Value
   Arr(i , 2) = item(1, 2).Value
   Arr(i , 3) = item(1, 3).Value
   Arr(i , 4) = item(1, 4).Value
   i = i + 1
Next

第一个循环交互使用从 item -> Arr 传递的正确值,但在第二个循环中一切都出错了。查看监视列表中的 item.values 不正确,并且在 ReDim 语句处循环炸弹,运行时错误“9”:下标超出范围。它必须是范围索引和/或 ReDim 语句。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    这对你有用吗?

    Dim result As Range, item As Range
    Dim Arr() As String, sStr As String
    sStr = "A3:D3,A7:D7,A15:D15,A25:D25"
    
    Set result = Range(sStr)
    ReDim Arr(result.Areas.Count, 4)
    i = 0
    For Each item In result.Areas
       Arr(i, 1) = item(1, 1).Value
       Arr(i, 2) = item(1, 2).Value
       Arr(i, 3) = item(1, 3).Value
       Arr(i, 4) = item(1, 4).Value
       i = i + 1
    Next
    

    【讨论】:

    • 修改后的索引开始并且有效... ReDim Arr(result.Areas.Count - 1, 3) & Arr(I, 1)... to Arr(I, 0)...基数为 0 的索引。谢谢
    猜你喜欢
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多