0

私はこのコードを改善する方法を学び、このサイトや他のサイトから例をとって取り組んできましたが、実行時エラー 1004「ワークシート クラスの貼り付けメソッドに失敗しました」を乗り越えることができないようです。他に2つの同様のマクロと、3つすべてを実行するボタンがあります。最初の2つは、「MyQueue」ファイルへの貼り付けに関して同じ構文で実行されますが、3番目は貼り付けられず、このエラーがスローされます。誰でも助けることができますか?

Sub CSQAgentSummaryEdit()

Dim MyPath As String
MyPath = " path "
MyFile = " file "
QueuePath = "path "
MyQueue = " file "
Dim wb1 As Workbook
Dim wb2 As Workbook

Set wb1 = Workbooks.Open(QueuePath)
Set wb2 = Workbooks.Open(MyPath)

Columns("A:V").Delete Shift:=xlUp
Columns("B").Delete Shift:=xlUp
Columns("C:R").Delete Shift:=xlUp


 Range("A1").Select
  Selection.End(xlDown).Select
  ActiveCell.Offset(2, 0).Range("A1").Select
  Selection.consolidate Sources:= _
    "'file data " _
    , Function:=xlSum, LeftColumn:=True

    Range("A1").CurrentRegion.Delete Shift:=xlUp
    Rows("1:1").Delete

    Range("A1").CurrentRegion.Select
    With Selection.Borders
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
    End With

  Selection.Copy
  Workbooks.Open (QueuePath)
  Range("A1").Select
  Selection.End(xlDown).Select
  ActiveCell.Offset(20, 0).Range("A1").Select
  ActiveSheet.Paste , False
  Workbooks(MyQueue).Save
  Workbooks(MyFile).Close False

End Sub
4

3 に答える 3

1

QueuePath ワークブックを 2 回開いているようです。

それ以外の

Selection.Copy
Workbooks.Open (QueuePath)
Range("A1").Select

試す

Selection.Copy
wb2.Sheets("Sheet1").Range("A1").Select

使用しているワークブックを指定すると、間違ったワークブックへの貼り付けや貼り付けエラーを回避できます。

于 2013-02-07T17:04:03.703 に答える
0

アクティブにする必要があるブックが適切なブックではない可能性があります。このリンクを確認してください: Excel VBA pastelink ランタイム エラー 1004: アプリケーション定義またはオブジェクト定義のエラー

于 2013-02-07T16:54:07.783 に答える
0

Excel は、外部の影響とそれ自体の動作の影響を受けることに注意してください。VBA は通常そうではありません。アクティブなものは一般的に望ましくありません。常に次のことをお勧めします。

set wsc = Sheets("Copy Sheet")
set wsp = Sheets("Paste Sheet")

..そして範囲を指定します。

また、私は常に .Paste の代わりに .PasteSpecial を使用しています。エラーがはるかに少なく、シートのアクティブ化に依存していませんが、実際にはそれが問題の手がかりです。

したがって、この部分:

Selection.Copy
Workbooks.Open()  'I also think you did this twice so it could be removed, but see below
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(20, 0).Range("A1").Select
ActiveSheet.Paste , False

各セルを選択する必要はありません。マイナーな点として、単一のセルを指定する場合、.Range("A1") よりも .Cells(1) の方が読みやすくなりますが、どちらも機能します。ただ壊れて、代わりにこれを試してください:

set rngToCopy = Selection
Set wsToPaste = wb2.Sheets("Name of Sheet")  'you don't need this if there's one sheet in the wb
rngToCopy.copy
wsToPaste.Cells(1).End(xlDown).Offset(20, 0).PasteSpecial
Application.CutCopyMode = False
于 2013-02-07T22:08:06.933 に答える