度々、参考にさせてもらっています。
タイトルの通りなのですが、バインディングを事前バインディングの変数を
使用すればできるのですが実行時バインディングの変数を使うと
うまく動きません。
コピ−する範囲は、シ−トの中の複数のセルですが
セルの範囲はランダムなので変数を使っています。
以下が、書いているソースの簡略化したものです。
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 メソッドが失敗しました。
と出ます。
どなたかご教授をお願いいたします。
動作確認してませんが・・・
掲載されているプログラムにバグがあります。
> 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のオブジェクトが生成されていませんので、その為の
エラーだと思いますが・・・
岡田 之仁 さん、返事ありがとうございます。
Set xls_Sheet2 = xls_Book2.Worksheets("コピ−先シート名")
につきましては、私の記入ミスでした。
申し訳ありません。
実際には
xls_App.ActiveSheet.Paste
ではなく
xls_book2.Worksheets("コピ−先シート名").Paste
とすることで解決できました。
しかし、この辺りの宣言の仕方については
まだまだ分からないことが多いです・・。
ツイート | ![]() |