質問: 4 then range("j3").select selection.pastespecial end if
回答: > 原因とその解決策を教えて頂きたいと思います。 遅すぎたかもしれませんが(汗)、自分の知っている範囲で・・・ (自分は専らaccess vbaばかり扱っているので) 【原因】 pastespecialを実行する前に、その参照元となるブックが 閉じられたことにより、その前に行った「select」による選択が 無効化してしまっています。 (エラーにならないことがあるのは・・・別のブックが「active workbook」と判断されて閉じられていたりしないでしょうか(汗)) 【解決策】 pastespecialを実行する前の「activewindow.close」を やめて、pastespecialの実行後に、コピー元のブックを 閉じるようにします。 このとき、閉じる対象を確実に「コピー元のブック」とするために、 コピー元を開く際の「workbooks.open」の戻り値を、変数に 記録しておき、これを使用してブックを閉じます。 【コード】 'コピー元を記録するための変数を宣言 dim wkb as workbook, rng as range '変数「wkb」に、コピー元を記録 '(workbookなどの「オブジェクト」と総称されるものに値を記録する ' 場合は、先頭に「set 」をつける必要があります。また、その際は、 ' openメソッドの引数(ここではファイルパス)は「( )」で囲みます) set wkb = workbooks.open(filename:=activeworkbook.path & "\" & activecell.offset(i, 0).range("a1").value) '先頭に「wkb.」をつけて、同ブックの「e1~e500000」であることを '明示して変数に格納した後、コピー '(ここではselectは省略した方が効率的です) set rng = wkb.range("e1:e500000") rng.copy 'できればここも「myfile」用の変数を別に用意して、上と同様に '対象を明示するとともに、selectは省略した方がよいかと思います。 workbooks(myfile).activate if j = 1 then range("g3").select selection.pastespecial elseif j = 2 then range("h3").select selection.pastespecial elseif j = 3 then range("i3").select selection.pastespecial elseif j = 4 then range("j3").select selection.pastespecial end if 'コピー用の選択状態を解除 '(これにより、「クリップボードに~」のメッセージが表示されなくなる ' ので、displayalertsの切り替えが不要になります) application.cutcopymode = false 'コピー元を閉じる wkb.close '念のため、明示的に変数を初期化してメモリを解放 set rng = nothing set wkb = nothing ・・・以上です。