你可能会,如果你通过每一个细胞中的.xlsx或.XLSM文件尝试循环遇到的问题,因为他们有1,048,576行,你这样做的两倍!无论你做什么,它都会导致放缓。
与其使用B:B和C:C的一揽子范围,您可以将其限制在可能包含数据的范围内。没有看到你的表,我不能肯定地说做到这一点的最好办法,但总的来说尝试这样的事:
Sub Properiser()
Dim rngAll As Range
Dim rngCell As Range
Dim lngLast As Long
lngLast = Range("B" & Rows.Count).End(xlUp).Row
If Range("C" & Rows.Count).End(xlUp).Row > lngLast Then
lngLast = Range("C" & Rows.Count).End(xlUp).Row
End If
Set rngAll = Range("B1", "C" & lngLast)
For Each rngCell In rngAll
If Not rngCell.HasFormula Then
rngCell.Value = WorksheetFunction.Proper(rngCell.Value)
End If
Next rngCell
End Sub
这会发现B列中最后使用的列,然后在C列,并使用较大者作为范围的终点。
我们还可以使用其他方法,例如使用UsedRange属性来查找文件中实际使用了多少行和列,但是如果没有看到数据,很难说这些数据中的哪一个可能对您更好或不。
编辑以展开:
现在,你提到你宁愿过程只看包含文本的单元格;有几种方法可以做到这一点。
选项1:检查空单元
如果你怀疑你经历了很多空单元格的弹跳,你可以简单地在你的。如果条件检查单元格内容。
if len(rngCell.value) <> 0 then
'Function
end if
选项2:检查非文本值
不幸的是,我们没有能够检查字母数字文本的简单,功能单一;我们需要走一条消除的道路。因此:
if len(rngCell.value) <> 0 then
if isnumeric(rngcell.value) = False AND _
iserror(rngcell.value) = false then
'Assume it's text and perform our function
End if
End if
...等等。您可以根据需要在IF循环中堆叠尽可能多的检查。
如何多行数据,你呢? – Brian
我们需要知道你的工作表是什么样的。一旦你达到了数据的结尾,你就想让循环中断,但是你还没有给我们一个方法来确定它在哪里。 – Fritz