tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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
---- ここまで ----

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。