2015-06-05 110 views
2

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

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 
+0

什么行有错误? – 99moorem

+0

Sub RangeOfFormulasToConstants() – AMorton1989

+0

这根本没什么意义。 – AMorton1989

回答

1

不应该在使用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 

不是通过对每个代码不当行错误绊相反,该捕获错误和混洗代码执行关闭的bm_Exit书签将环境退出之前恢复。

+0

我重新启动,修改了代码,它工作正常。谢谢一堆。 – AMorton1989