粘贴有时会抛出错误:Range类的Pastespecial方法失败

时间:2013-02-05 09:26:24

标签: excel vba paste

我正在尝试将手动复制的工作表粘贴到名为“Digital - Input”的工作表中。

我有时会收到错误

  

Range类的Pastespecial方法失败

这是我的粘贴声明:

    Worksheets("Digital - Input").range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

这是我的完整代码:

Sub pasteDigitalInput()

    Application.ScreenUpdating = False

    'open the source sheet
    Call unlockAll

    'show the input sheet
    Call showerfunc("Digital - Input")

    'paste values
    'On Error GoTo feilmeld
    Worksheets("Digital - Input").range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    'Update cell references
    Call getTotals

    'Set the start of ukestrykk for digital
    showerfunc ("Kilder")
    Sheets("Kilder").Select
    range("J2").Select
    Call findAnd("Netto spend pr uke:", "Kilder", "Digital - Input", 2, 0, , , True)
    hiderfunc ("Kilder")

    'Hide sheet
    Call hiderfunc("Digital - Input")
    Sheets("Digital").Select
    Application.ScreenUpdating = True

    'locks the sheet again
    Call lockAll

    Exit Sub

feilmeld:
    'hiderfunc ("Digital - Input")
    Sheets("Digital").Select
    Call lockAll
    Application.ScreenUpdating = True

    MsgBox ("Du må kopiere planen fra excel utskriften til Adform før du bruker denne knappen. OBS! kopier planen på nytt og lås opp Digital arket før du prøver igjen.")

End Sub

修改  它在打开两本工作簿之后似乎正常工作。但是,如果我使用任何其他宏,特别是清理输入表的宏,我得到错误。

清理输入表宏:

Sub clearInputDigital()

Call ClearInput("Digital - Input", "Digital")

End Sub


Sub ClearInput(inputsheet As String, sourceSheet As String)

Application.ScreenUpdating = False

'Show the sheet
showerfunc (inputsheet)

Sheets(inputsheet).Select

Cells.Select
Selection.ClearContents

'Hide the sheet
hiderfunc (inputsheet)

Sheets(sourceSheet).Select

Application.ScreenUpdating = True

End Sub

2 个答案:

答案 0 :(得分:0)

(显然我不确定你所呼唤的subfunction中发生了什么事情)

我并不总是相信excel VBA编译器引用我编码引用的对象,所以我总是尝试完全限定我的代码,如下所示

Sub pasteDigitalInput()

    Excel.Application.ScreenUpdating = False

    'open the source sheet
    Call unlockAll

    'show the input sheet
    Call showerfunc("Digital - Input")

    'paste values
    'On Error GoTo feilmeld
    Excel.ThisWorkbook.Worksheets("Digital - Input").Range("A1").PasteSpecial Paste:=Excel.xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

    'Update cell references
    Call getTotals

    'Set the start of ukestrykk for digital
    showerfunc ("Kilder")
    With Excel.ThisWorkbook.Sheets("Kilder")
        .Activate
        .Range("J2").Select
    End With
    Call findAnd("Netto spend pr uke:", "Kilder", "Digital - Input", 2, 0, , , True)
    hiderfunc ("Kilder")

    'Hide sheet
    Call hiderfunc("Digital - Input")
    Excel.ThisWorkbook.Sheets("Digital").Activate
    Excel.Application.ScreenUpdating = True

    'locks the sheet again
    Call lockAll

    Exit Sub

feilmeld:
    'hiderfunc ("Digital - Input")
    Excel.ThisWorkbook.Sheets("Digital").Activate
    Call lockAll
    Excel.Application.ScreenUpdating = True

    MsgBox ("Du må kopiere planen fra excel utskriften til Adform før du bruker denne knappen. OBS! kopier planen på nytt og lås opp Digital arket før du prøver igjen.")

End Sub

如果您只是移动值,也许您可​​以尝试避免使用剪贴板,并使用更像这样的结构:

Sub WithoutPastespecial()

'WORKING EAXAMPLE

Dim firstRange As Excel.Range
Dim secondRange As Excel.Range

Set firstRange = Excel.ThisWorkbook.Worksheets("Cut Sheet").Range("S4:S2000")
With Excel.ThisWorkbook.Worksheets("Cutsheets")
    Set secondRange = .Range("A" & .Rows.Count).End(Excel.xlUp).Offset(1)
End With

With firstRange
      Set secondRange = secondRange.Resize(.Rows.Count, .Columns.Count)
End With
secondRange.Value = firstRange.Value


End Sub 

答案 1 :(得分:0)

通常,当打开的当前窗口(工作表)与粘贴某些内容的窗口(工作表)不同时,会显示此错误。 Excel对此非常严格。当您手动执行此操作时,显然在粘贴之前选择了工作表,因此您永远不会看到错误。

因此,在粘贴到“Digital - Input”工作表之前,只需在其上方插入一行,以选择要粘贴的工作表,然后粘贴。另外,如果您正在处理多个文件,我建议您使用“Thisworkbook”,以便...您知道... excel不会混淆您所指的工作簿。所以你的代码将是

Thisworkbook.Worksheets("Digital - Input").Select
Worksheets("Digital - Input").range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

希望这有帮助。