VBA – 自动化错误 – Excel 2013

我有以下(以前工作)将公式转换为其常数值的代码。 我将其附加到电子表格上的表单button。 这工作正常,然后决定rest。 我点击button或运行macros,一个框出现“自动化错误”。 Excel帮助将其描述为“自动化错误(错误440)”。
我遵循论坛的build议,在各地插入“On Error Resume Next”声明。 我曾尝试重新创buildmacros。 我已经尝试了一些不同版本的macros。 但还没有设法修复它。 我如何摆脱这个错误? 是否类似于Java和Python中的try catch语句?

Sub RangeOfFormulasToConstants() ' ' Changes a selection of Formulas into their values thus removing the formula. ' ' Keyboard Shortcut: Ctrl+q Dim Rng As Range Dim WorkRng As Range On Error Resume Next xTitleId = "Useful box" Set WorkRng = Application.Selection Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8) Application.ScreenUpdating = False For Each Rng In WorkRng Rng.Value = Rng.Text Next Application.ScreenUpdating = True End Sub 

我有其他macros正在与电子表格和表单button。 详细如下。

 Sub CopyFormulasNonCalculate() ' ' PasteMacro Macro ' ' Keyboard Shortcut: Ctrl+m ' On Error Resume Next Set Ret = Application.InputBox(Prompt:="Please select a range where you want to paste", Type:=8) On Error GoTo 0 If Not Ret Is Nothing Then Selection.Copy Range("C2:F2").Copy Destination:=Ret Application.CutCopyMode = False End If End Sub Sub CopyFormulasCalculate() Dim Ret As Range Dim RangeToCopy As Range Set RangeToCopy = Range("H3:AF3") ' ' PasteMacro Macro ' ' Keyboard Shortcut: Ctrl+m ' Set Ret = Application.InputBox(Prompt:="Please select a range where you want to paste", Type:=8) If Not Ret Is Nothing Then RangeToCopy.Copy Destination:=Ret Ret.Resize(1, RangeToCopy.Columns.Count).Calculate Application.CutCopyMode = False End If End Sub 

你不应该使用Rng.Value = Rng.Text而不知道你正在转录回单元格。 这将尝试将格式化的单元格显示值作为值返回给单元格。 本质上,你得到的细胞看起来不一定是价值。

改用Rng = Rng.ValueRng = Rng.Value2 。 这需要公式返回的基础值,并将单元格的值设置为该值。

 Sub RangeOfFormulasToConstants() ' Changes a selection of Formulas into their values thus removing the formula. ' Keyboard Shortcut: Ctrl+q Dim WorkRng As Range, xTitleId As String Application.ScreenUpdating = False xTitleId = "Useful box" On Error GoTo bm_Exit Set WorkRng = Application.InputBox("Range: ", xTitleId, Selection.Address, Type:=8) WorkRng = WorkRng.Value 'do it all at once - no need to loop through bm_Exit: Application.ScreenUpdating = True End Sub 

而不是绊倒每个不适当的代码行的错误,这陷阱错误和洗牌代码执行closures到退出之前环境恢复的bm_Exit书签。