私は次のコードを書いて、継続的にクラスの過去のメソッドが失敗しましたを参照しています。私はこの問題を克服しようとしましたが、何もうまくいかないようです。あるワークブックからシート全体をコピーして、別のブックに貼り付けようとしています。
Set x = Workbooks.Open(" path to copying book ")
Workbooks.Open(" path to copying book ").Activate
Range("A1").Select
'Cells.Select
Selection.Copy
Set y = Workbooks.Open("path to pasting book")
Workbooks.Open("Path to pasting book").Activate
With y
Sheets("sheetname").Cells.Select
Range("A1").PasteSpecial
'Sheets("sheetname").PasteSpecial
.Close
End With
With x
.Close
End With
これでうまくいくはずです。問題がある場合はお知らせください。
Sub foo()
Dim x As Workbook
Dim y As Workbook
'## Open both workbooks first:
Set x = Workbooks.Open(" path to copying book ")
Set y = Workbooks.Open(" path to destination book ")
'Now, copy what you want from x:
x.Sheets("name of copying sheet").Range("A1").Copy
'Now, paste to y worksheet:
y.Sheets("sheetname").Range("A1").PasteSpecial
'Close x:
x.Close
End Sub
または、次のことができます。
Sub foo2()
Dim x As Workbook
Dim y As Workbook
'## Open both workbooks first:
Set x = Workbooks.Open(" path to copying book ")
Set y = Workbooks.Open(" path to destination book ")
'Now, transfer values from x to y:
y.Sheets("sheetname").Range("A1").Value = x.Sheets("name of copying sheet").Range("A1")
'Close x:
x.Close
End Sub
これをシート全体に拡張するには:
With x.Sheets("name of copying sheet").UsedRange
'Now, paste to y worksheet:
y.Sheets("sheet name").Range("A1").Resize( _
.Rows.Count, .Columns.Count) = .Value
End With
さらに別の方法として、値を変数として保存し、変数を宛先に書き込みます。
Sub foo3()
Dim x As Workbook
Dim y As Workbook
Dim vals as Variant
'## Open both workbooks first:
Set x = Workbooks.Open(" path to copying book ")
Set y = Workbooks.Open(" path to destination book ")
'Store the value in a variable:
vals = x.Sheets("name of sheet").Range("A1").Value
'Use the variable to assign a value to the other file/sheet:
y.Sheets("sheetname").Range("A1").Value = vals
'Close x:
x.Close
End Sub
上記の最後の方法は、通常、ほとんどのアプリケーションで最も高速ですが、非常に大きなデータセット(10万行)の場合、クリップボードが実際に配列ダンプを上回ることが観察されていることに注意してください。
コピー/貼り付けスペシャルvs Range.Value = Range.Value
とはいえ、速度だけでなくotherの考慮事項があり、大きなデータセットでのパフォーマンスヒットはトレードオフの価値がある場合があります。クリップボードとの対話。
Cellsを使用してコピーしました。
その場合、データをまったく同じ形式でコピーするため、PasteSpecialは不要です。
これは、いくつかの修正を加えたコードです。
Dim x As Workbook, y As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Set x = Workbooks.Open("path to copying book")
Set y = Workbooks.Open("path to pasting book")
Set ws1 = x.Sheets("Sheet you want to copy from")
Set ws2 = y.Sheets("Sheet you want to copy to")
ws1.Cells.Copy ws2.cells
y.Close True
x.Close False
ただし、本当に特別に貼り付けたい場合は、ダイナミックRange( "Address")を使用してコピーしてください。
このような:
ws1.Range("Address").Copy: ws2.Range("A1").PasteSpecial xlPasteValues
y.Close True
x.Close False
:
文字の後の.Copy
の後のStatement Separating
コロンに注意してください。Object.PasteSpecial
を使用するには、新しい行で実行する必要があります。
これでうまくいくことを願っています。