【发布时间】:2017-03-23 22:53:13
【问题描述】:
我正在尝试将存储在文本中的数字转换为多个工作表上的数字。我的问题是我拼凑的代码似乎花费了过多的时间。我正在使用循环遍历必要的工作表和范围的 For Each 语句。它不会使 Excel 崩溃,它只是看似永远运行。
Sub ConvertTextToNumber()
Application.ScreenUpdating = False
Dim WshtNames As Variant
Dim WshtNameCrnt As Variant
Dim r As Range
WshtNames = Array("Financial Data", "Site Data ", "Org Data", "Program Data")
For Each WshtNameCrnt In WshtNames
On Error Resume Next
For Each r In Worksheets(WshtNameCrnt).UsedRange.SpecialCells(xlCellTypeConstants)
If IsNumeric(r) Then r.Value = Val(r.Value)
Next
Next
Application.ScreenUpdating = False
End Sub
当我停止运行脚本并单击“调试”时,它似乎被第一个 Next 语句所吸引。我认为我用来转换值的方法比必要的时间更密集,因此在多张纸上运行它甚至更糟。
我愿意接受任何和所有让这个过程运行得更快的建议。提前致谢!
【问题讨论】:
-
查看使用的最后一行和最后一列,将所有内容加载到数组中,进行更改,然后将值放回原处。它会加快速度。因为它是你循环通过每个单元测试它并改变它。这将需要很长时间。数组会以指数方式加速它。
-
这肯定会帮助我想象。我知道我的数据不会超过某个点,我的更新对我有用。但是,如果我有时间,我会更新代码以简单地找到最后一行和最后一列并将其发布在这里。谢谢!
-
不要把它放在问题中,而是把新代码作为答案,就这样。
-
对不起!我很新,还没有机会提供我自己的答案。感谢您的提醒!