有一些什么限制,我可以在通过VBA的范围内选择?基本上我发现的是,如果我是隐藏整个行,而在一个循环时,会如果有大量的行隐藏的相当长一段时间。范围限制的难题
前) - 隐藏不具有在列值的任何行A
For i = 1 to 600
With Range("A" & i)
If .value = vbEmpty then .EntireRow.Hidden = True
End With
Next
这样做的更快捷的方法是使每个引用这些行的一个范围,然后做一个单“.entirerow.hidden = true”语句。是的,我已经有了application.screenupdating = false设置。
我现在遇到的问题是,如果该范围的字符串引用太长,它只是失败。
下面的代码声明它接受行号的一个标准数组(如果该数组手之前进行),以及参数的参数(如果你不想手之前声明数组的功能,并且行的列表很小)。然后它创建一个在范围参考中使用的字符串。
Function GetRows(argsArray() As Long, ParamArray args() As Variant) As Range
Dim rngs As String
Dim r
For Each r In argsArray
rngs = rngs & "," & r & ":" & r
Next
For Each r In args
rngs = rngs & "," & r & ":" & r
Next
rngs = Right(rngs, Len(rngs) - 1)
Set GetRows = Range(rngs)
End Function
Function dfdfd()
Dim selList(50) As Long, j As Long
For i = 1 To 100
If i Mod 2 = 1 Then
selList(j) = i
j = j + 1
End If
Next
selList(50) = 101
GetRows(selList).Select
End Function
第二个函数“dfdfd”只是用来举例说明它何时失败。要查看它的工作时间,只需创建一个包含5个条目的新数组,然后尝试。有用。 (?)
最后更新:
Option Explicit
Public Sub test()
Dim i As Integer
Dim t As Long
Dim nRng As Range
t = Timer()
Application.ScreenUpdating = False
Set nRng = [A1]
For i = 1 To 6000
Set nRng = Union(nRng, Range("A" & i))
Next
nRng.RowHeight = 0
'nRng.EntireRow.Hidden = true
Application.ScreenUpdating = True
Debug.Print "Union (RowHeight): " & Timer() - t & " seconds"
'Debug.Print "Union (EntireRow.Hidden): " & Timer() - t & " seconds"
End Sub
结果:
联盟(行高:0.109375秒
联盟(隐行):0.625秒
完美!谢谢一堆。 – JakeTheSnake 2009-11-02 21:03:55