タイトル : Re^2: 異なるブックからのワークシート挿入 投稿日 : 2014/08/28(Thu) 17:17 投稿者 : 乙さん
VBレスキュー(花ちゃん) さん 魔界の仮面弁士さん お二方とも素早い反応ありがとうございました。助かりました。 > > (1) この操作を行うサーバ(2003サーバ)には Office がインストールされていません。 > > 実行環境に Excel がインストールされていない場合、 > 「CreateObject("Excel.Application")」が失敗します。 > > Excel をインストールするか、 > Excel の有無に依存しない他の方法を採用してください。 …とのことですので、サーバに Excel をインストールしようと思います。 > > Set WB1 = XL1.Workbooks.Open("D:\work\master.xls") > > Set WB2 = XL2.Workbooks.Open("D:\work\01.xls") > (中略) > > WS1.Copy After:=WS2 > > WB1 は XL1 上で開き、 > WB2 は XL2 上で開いていますよね。 > > > 実際に手作業で操作する場合もそうですが、 > 『Excel.exe を1つ起動し、その中で 2 つのブックを開く』場合はブック間のコピーができますが、 > 『Excel.exe を2つ起動し、それぞれでブックを開く』場合には、ブック間のコピーはできません。 全く仰られるとおりです。 そこで、修正を加えて当初の希望通りの目的を果たせたので、修正したソースを掲載します。 元々の WB1 に該当する master.xls が読み込み専用で開かれてしまっていて、このファイルには 保存できなかったので、別ファイルに保存する形になっていますが… なお、挿入するワークシートを 1 つから 2 つにしてみました。 あとは私の調整次第です。 ---- ここから ---- Dim XL1 As Object 'XL2 は不要なので宣言しない Dim WB1, WB2, WB3 As Object 'WB3 を追加 Dim WS1, WS2, WS3 As Object 'WS3 を追加 ' 新規にExcelを起動する Set XL1 = CreateObject("Excel.Application") XL1.Visible = False ' 【修正】以下は不要になった 'Set XL2 = CreateObject("Excel.Application") 'XL2.Visible = False ' 既存のファイルを開く Set WB1 = XL1.Workbooks.Open("D:\work\master.xls") ' 【修正と追加】XL2 で開くのではなく、同一の XL1 上で開く ' 同じ理由で XL1 上で WB3 を開く Set WB2 = XL1.Workbooks.Open("D:\work\01.xls") Set WB3 = XL1.Workbooks.Open("D:\work\02.xls") ' 操作対象となるワークシートを取得 Set WS1 = WB1.Worksheets("全社計") Set WS2 = WB2.Worksheets("01") ' 【追加】 Set WS3 = WB3.Worksheets("02") ' シートをコピー(全社計の後に 01 を置きたい) ' 【修正】下記は間違い 'WS1.Copy After:=WS2 ' 【修正】WS1 の後に WS2 と WS3 を挿入する WS2.Copy After:=WS1 WS3.Copy After:=WS1 ' 【追加】シートを別名保存 WB1.SaveAs "D:\work\master_total.xls" '変数の解放とExcelの終了 Set WS1 = Nothing Set WS2 = Nothing ' 【追加】 Set WS3 = Nothing WB1.Close saveChanges:=True WB2.Close ' 【追加】 WB3.Close Set WB1 = Nothing Set WB2 = Nothing ' 【追加】 Set WB3 = Nothing ' 【修正】以下は不要になった ' XL2.Quit XL1.Quit ' 【修正】以下は不要になった ' Set XL2 = Nothing Set XL1 = Nothing ---- ここまで ---- |