简单的Excel VBA宏:Range类的错误1004方法失败

时间:2017-06-23 01:24:36

标签: excel vba excel-vba paste

在Excel 2013中:

我使用以下代码创建了一个模块:

Sub PasteFormatting()
    ActiveCell.PasteSpecial (xlPasteValues)
End Sub

在宏中,我将PasteFormatting设置为CTRL + V. 但是,当我在工作表中选择一个单元格并执行“ctrl + v”时,我收到错误:

Run-time error '1004': PasteSpecial method of Range class failed

这是我第一次使用宏,而且我找不到任何基本的东西来帮助我。

我想做的就是复制剪贴板中的内容,进入Excel,选择一个单元格,然后粘贴而不更改单元格的格式。

2 个答案:

答案 0 :(得分:1)

如果您正在寻找粘贴而不会丢失目标格式,即使使用Ctrl + V,只需将下面的代码放在Microsoft Excel对象“ThisWorkbook”下(即不在任何模块下)。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim UndoString As String, srce As Range
    On Error GoTo err_handler
    UndoString = Application.CommandBars("Standard").Controls("&Undo").List(1)
    If Left(UndoString, 5) <> "Paste" And UndoString <> "Auto Fill" Then
        Exit Sub
    End If
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Undo
    If UndoString = "Auto Fill" Then
        Set srce = Selection
        srce.Copy
        Target.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.SendKeys "{ESC}"
        Union(Target, srce).Select
    Else
        Target.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End If
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Exit Sub
err_handler:
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
顺便说一下,我没有因为它在互联网上广泛使用而受到任何赞誉。

答案 1 :(得分:0)

您的代码有效。如果在执行代码之前没有在剪贴板中复制任何内容,则会产生此类错误。当你使用内置的 Ctrl + V 粘贴东西而不先复制任何东西时,会发生同样的事情。如果你这样做,你会听到一声哔哔声。要处理你的错误并模仿这样的尝试:

Sub PasteFormatting()
    On Error Resume Next
    ActiveCell.PasteSpecial (xlPasteValues)
    If Err.Number <> 0 Then Beep
    On Error GoTo 0
End Sub