我有以下(以前有效的)代码将公式转换为其常数值。我将其附加到电子表格上的表单按钮。工作正常,然后决定中断。我单击按钮或运行宏,然后出现一个带有“自动化错误”的框。Excel帮助将其描述为“自动化错误(错误440)”。
我遵循了论坛的建议,在各个位置插入了“ On Error Resume Next”语句。我试图重新创建宏。我尝试了一些不同版本的宏。但尚未设法修复它。如何摆脱这个错误?它类似于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
我还有其他正在与电子表格和表单按钮一起使用的宏。详细如下。
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.Value
或Rng = 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
可以捕获错误并将代码执行重新整理到bm_Exit书签中,而不是在每个不合适的代码行中都被错误绊倒,而在退出之前恢复环境。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句