0

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

我有时会收到错误

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
4

2 回答 2

0

(显然我不确定你打电话的subs 和functions 发生了什么)

我并不总是相信 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 
于 2013-02-05T10:11:59.367 回答
0

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

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

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

希望这可以帮助。

于 2013-02-06T06:49:28.350 回答