二つのEXCEL.Book間でコピ−、ペーストを行うには?

解決


SEI  2003-12-09 00:13:29  No: 80772

度々、参考にさせてもらっています。
タイトルの通りなのですが、バインディングを事前バインディングの変数を
使用すればできるのですが実行時バインディングの変数を使うと
うまく動きません。
コピ−する範囲は、シ−トの中の複数のセルですが
セルの範囲はランダムなので変数を使っています。
以下が、書いているソースの簡略化したものです。

Dim xls_App    As object
Dim xls_Book1  As object  'コピー元ブック
Dim xls_Sheet1 As object  'コピー元シート
Dim xls_Book2  As object  'コピー先ブック
Dim xls_Sheet2 As object  'コピー先シート
Dim MinGyo     As long    'コピ−位置の始点(最小行名)
Dim MinRetu    As long    'コピー位置の始点(最小列名)
Dim MaxGyo     As long    'コピ−位置の終点(最大行名)
Dim MaxRetu    As long    'コピー位置の終点(最大列名)

Set xls_App = CreateObject("Excel.Application")
Set xls_Book1 = xls_App.Workbooks.Open("コピー元ファイル名")
Set xls_Sheet1 = xls_Book1.Worksheets("コピ−元シート名")
Set xls_Book2 = xls_App.Workbooks.Open("コピー先ファイル名")
Set xls_Sheet1 = xls_Book1.Worksheets("コピ−先シート名")

'選択範囲のコピー
xls_Sheet1.Range(xls_Sheet1.Cells(MinGyo,MinRetu),xls_Sheet1.Cells(MaxGyo,MaxRetu)).Copy
 
Application.CutCopyMode = False

'コピー先ブックをアクティブにする
xls_Book2.Activate
'コピー先シートをアクティブにする
xls_Book2.Worksheets("コピー先シ−ト名").Activate 
'"A3"をコピ−開始地点とする
xls_App.Range("A3").Select
'ペ−ストを行う
xls_App.ActiveSheet.Paste       ←ここで落ちます

エラ−は
Worksheet クラスの Paste メソッドが失敗しました。
と出ます。

どなたかご教授をお願いいたします。


岡田 之仁  2003-12-09 02:54:08  No: 80773

動作確認してませんが・・・

掲載されているプログラムにバグがあります。

> Set xls_Book2 = xls_App.Workbooks.Open("コピー先ファイル名")
> Set xls_Sheet1 = xls_Book1.Worksheets("コピ−先シート名")

ですが、

Set xls_Book2 = xls_App.Workbooks.Open("コピー先ファイル名")
Set xls_Sheet2 = xls_Book2.Worksheets("コピ−先シート名")   ' <= ここ!

の間違いでは?
xls_Sheet2のオブジェクトが生成されていませんので、その為の
エラーだと思いますが・・・


SEI  2003-12-09 18:39:57  No: 80774

岡田 之仁 さん、返事ありがとうございます。
Set xls_Sheet2 = xls_Book2.Worksheets("コピ−先シート名")
につきましては、私の記入ミスでした。
申し訳ありません。

実際には
xls_App.ActiveSheet.Paste
ではなく
xls_book2.Worksheets("コピ−先シート名").Paste
とすることで解決できました。
しかし、この辺りの宣言の仕方については
まだまだ分からないことが多いです・・。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加