繁体   English   中英

Excel VBA:如何将变量数组元素(行号)连接到范围对象中?

[英]Excel VBA: How to concatenate variant array elements (row numbers) into a range object?

我确实研究了这个问题,但是找不到我想要的具体答案,实际上目前更加困惑。

我创建了一个宏,该宏将遍历工作表上的行,并对每行中查找是否存在特定值的单元格进行布尔检查,或者计算特定不等式的结果。 根据这些检查,宏可能会也可能不会将行号传递到特定的数组中。 那部分工作正常。

我的问题是,现在我有了行号(存储在变量数组中)-我无法弄清楚如何正确地将数据连接到一个范围内,然后对这些项目执行大量的excel操作。 我想做的是创建这些值的范围,然后一次删除所有这些行,而不是循环遍历。

我的宏在我的工作计算机上,但是我写的一些东西应该解释我正在尝试做的事情:

    Sub Test()
Dim Str As String
Dim r As Range
Dim i, a As Integer
Dim Count As Integer
Dim RngArray()



Count = ThisWorkbook.Sheets("Sheet1").Cells(Rows.Count, "A:A").End(xlUp).Row
ReDim RngArray(Count)


a = 0
For i = 1 To Count
    If Not i = Count Then
        RngArray(a) = i
        Str = Str & RngArray(a) & ":" & RngArray(a) & ", "
        a = a + 1
    ElseIf i = Count Then
        RngArray(a) = i
        Str = Str & RngArray(a) & ":" & RngArray(a)
        a = a + 1
    Else: End If
Next i

Set r = Range(Str)'Error Can Appear here depending on my concatenation technique
Range(Str).EntireRow.Delete 'error will always appear here

End Sub

我在这里组合了几个步骤,并省略了所有布尔检查。 在我的实际宏中,数组中的值已经存储,并且我从LBound循环到UBound并将这些值连接成以下形式的字符串:““ 1:1,2:2,3:3,....,n: N“)

之所以这样做,是因为行遍及整个工作表,我想达到可以传递参数的地步

Range("1:1, 2:2, 3:3, ..., n:n").EntireRow.Delete

我认为很明显,我只是不了解如何将正确的信息传递给范围对象。 当我尝试运行此命令时,出现“对象全局范围方法”错误消息。

我的短期解决方法是循环遍历并清除行,然后删除所有空白行(宏会跟踪行的绝对位置,而不是迭代删除后的行)-但我想弄清楚如何以我的方式执行此操作,以及为何不起作用。

我也欢迎其他解决方案,但我想了解我在这里做错了什么。 我还应该提到,我使用Join()来尝试找到解决方法,但仍然收到相同类型的错误。

谢谢。

在对上面的宏的数据集进行了一些试验之后,我发现它可以处理A:A中的少量数据集,但不适用于较大的数据集。

我在调整设置大小和宏的同时运行Debug.Print Len(Str) ,发现Range()最多只能接受240个字符。 我仍然不明白为什么会这样,或者我收到特定错误消息的原因,但是如果Len(Str)<240,则宏将起作用。

如果我想使用我现在的方法,我将不得不在我的数组中向后循环以删除这些行...或者我可以尝试其他方法。

感谢安德鲁对此的关注!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM