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

編集: 2 つのワークブックを開いた直後に動作するようです。ただし、他のマクロ、特に入力シートを消去するマクロを使用すると、エラーが発生します。

入力シート マクロをクリーンアップ:

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 とsで何が起こっているのかわかりません)function

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 に答える