我正在处理一系列大型工作簿,并使用一种工具从财务数据库 (SAP Financial Consolidation) 导入值。它的工作方式是使用 UDF,例如=GetCtData({parameters})
or =GetCtLabel({parameters})
。其中一个参数是单元格的输出值,因此在任何时候,单元格的值都是一个数字。
要与没有 Financial Consolidation 加载项的其他人共享这些工作簿,我需要将每个单元格转换为值。我不想将所有单元格转换为值,只有带有=GetCt...
公式的单元格。下面是我到目前为止写的代码,它有三种(类似的)方法(两种被注释掉了)。它在小型工作簿上完美运行,但文件现在已经增长,可能总共有 250,000 多个单元格需要更新。(大约 70 列 x 350 行 x 10+ 个工作表。)我试过运行它,但几个小时后它仍在运行。
任何人都可以提出更有效的方法吗?
Sub removeAllMagnitudeLinks()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
For Each sSheet In Worksheets
If sSheet.Name <> "blankMagnitude" Then 'Don't remove links from the blankMagnitude sheet -- unnecessary
If sSheet.FilterMode Then sSheet.ShowAllData
Application.StatusBar = "Working on sheet #" & sSheet.Index & " of " & Worksheets.Count & ". Name: " & sSheet.Name
On Error Resume Next
While Err.Number = 0
With sSheet.Cells.Find(What:="GetCt", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
' .Copy 'Copying and pasting is one approach, but may not be fastest
' .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
' .Formula = .Value 'This is another approach, which is certainly not very fast
.Value = .Value
End With
Wend
End If
Next sSheet
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub