首页 > 解决方案 > 使用 VBA 在 Excel 列表框中显示选择范围值

问题描述

我尝试在 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 语句。

标签: excelvba

解决方案


这对你有用吗?

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

推荐阅读