我运行下面的代码,循环查看6.5万个标准单元格,这些标准是根据" LISTS"中包含的范围查找的。标签提到。这个范围大约是2万行。
我昨天在测试文件中多次运行代码并且运行得非常快。也许2分钟:如果那样。
今天,在决定我对代码感到满意之后,我已经把它贴上了(因为我想知道这是否与它有关)在我的主项目中。 现在,当我运行代码时,需要2个小时的时间!
除了工作表名称之外,我没有更改任何代码。
有没有人知道我遗失的任何原因?
我是VBA的新手,所以我怀疑某个新手的错误!
Dim x As Long
x = WorksheetFunction.CountA(Columns(1))
'define string length for CELL loop
Dim char As Integer
char = Len(ActiveCell)
'define cell loop name
Dim counter As Integer
'Begin RANGE loop
For Each cell In Range("b1:b" & x)
cell.Activate
'Incorporate CELL loop
For counter = 1 To char
'Determine if numeric value present in cell = TRUE or FALSE
If IsNumeric(Right(Mid(ActiveCell, 1, counter), 1)) = True Then
ActiveCell.Offset(0, 1).Value = Right(ActiveCell.Offset(0, 0), Len(ActiveCell.Offset(0, 0)) - counter + 1)
Exit For
Else
ActiveCell.Offset(0, 1).Value = ActiveCell.Offset(0, 0)
End If
Next
Next
答案 0 :(得分:2)
尝试下面的代码,代码注释中的解释:
Dim x As Long
Dim char As Long 'define string length for CELL loop
Dim counter As Long 'define cell loop name
x = WorksheetFunction.CountA(Columns(1))
Application.ScreenUpdating = False ' will make your code run faster
Application.EnableEvents = False
'Begin RANGE loop
For Each cell In Range("b1:b" & x)
'cell.Activate ' <--- no need to Activate, realy slows down your code
'Incorporate CELL loop
For counter = 1 To char
'Determine if numeric value present in cell = TRUE or FALSE
If IsNumeric(Right(Mid(cell.Value, 1, counter), 1)) = True Then
cell.Offset(0, 1).Value = Right(cell.Value, Len(cell.Value) - counter + 1)
Exit For
Else
cell.Offset(0, 1).Value = cell.Value
End If
Next counter
Next cell
Application.ScreenUpdating = True
Application.EnableEvents = True
答案 1 :(得分:1)
您需要避免使用ActiveCell
,只要它减慢您的代码速度。您正在使用for-each
进行循环,因此您可以像这样使用循环中的变量:
For Each cell In Range("b1:b" & x)
For counter = 1 To char
If IsNumeric(Right(Mid(cell, 1, counter), 1)) = True Then
cell.Offset(0, 1).Value = Right(cell, Len(cell) - counter + 1)
Exit For
Else
cell.Offset(0, 1) = cell.Offset(0, 0)
End If
Next
Next
此外,像cell.Offset(0, 0)
这样的东西有点无用。如果您不需要Offset
,请不要编写它。总的来说:
答案 2 :(得分:0)
感谢所有花时间发帖的人。 原来我是一个IDIOT !!!
我第一次运行代码时,我认为自动计算,而且当我重新运行代码时,我一直在评论它。
我是VBA的新手,但没有任何借口!哎!
所以,修复(由线程上的其他人建议):
在宏的主体之前输入:
Application.Calculation = xlCalculationManual
然后在宏之后输入:
Application.Calculation = xlCalculationAutomatic