- PR -

開いていないExcelのデータを参照したい

1
投稿者投稿内容
MCP
会議室デビュー日: 2007/06/22
投稿数: 6
投稿日時: 2007-08-28 11:28
AとBのExcelがあります。
また、A,Bのシート構成は以下となります。
A:Sheet1
B:Sheet1,Sheet2,Sheet3


Aのマクロから、条件指定して、Bのシートの一つををコピーして、AのExcelにシートを追加したいと思います。
そのとき、BのExcelは開いていないでも出来るのでしょうか?

また、条件でSheet4とした時、Bには、Sheet4がありません。
その時のSheetの存在チェックもExcelを開いていないも可能でしょうか?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-08-28 11:37
引用:

MCPさんの書き込み (2007-08-28 11:28) より:

AとBのExcelがあります。


"Excel" ではなく 'Excel ブック' もしくは 'Workbook' のことですね。

引用:

Aのマクロから、条件指定して、Bのシートの一つををコピーして、AのExcelにシートを追加したいと思います。そのとき、BのExcelは開いていないでも出来るのでしょうか?


Office PIA / VSTO いずれを使用するにしても内部的に開いています。 MCP さんが心配しているのは "開いていなくとも" ではなく '表示していなくても' だったりしないでしょうか?

引用:

また、条件でSheet4とした時、Bには、Sheet4がありません。その時のSheetの存在チェックもExcelを開いていないも可能でしょうか?


上記とまったく同じ回答になります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
MCP
会議室デビュー日: 2007/06/22
投稿数: 6
投稿日時: 2007-08-28 11:52
引用:

"Excel" ではなく 'Excel ブック' もしくは 'Workbook' のことですね。


はい、そうです。

引用:

Office PIA / VSTO いずれを使用するにしても内部的に開いています。 MCP さんが心配しているのは "開いていなくとも" ではなく '表示していなくても' だったりしないでしょうか?



Office PIA / VSTOってのが知識不足で知りませんが、
普通にExcelのマクロを使用します。
内部的にすべてのBookが開いているということなんですかね?
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-08-28 12:11
引用:

MCPさんの書き込み (2007-08-28 11:52) より:

Office PIA / VSTOってのが知識不足で知りませんが、普通にExcelのマクロを使用します。


おっと、VBA でしたか。

引用:

内部的にすべてのBookが開いているということなんですかね?


すべての Book というか、MCP さんが操作したいと思っている Workbook が内部的に開かれます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
YAS
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 59
投稿日時: 2007-08-28 13:51
ExecuteExcel4Macro関数(Excel 4.0 マクロ関数を実行)を使って他のBookにアクセスした場合は,内部的にも開かずにアクセスできると聞いたことがあります。

しかし,Excel4.0のマクロ関数に関する資料はほとんど見あたらないので具体的にどうやったらシートのコピーができるのかはわかりません。

仮想PCにでも古いExcelをインストールしてみればヘルプがあるかもしれません。
仮想PCにWindows3.1をインストールするところまではやってみたのですが,Excelのフロッピーで読めないものがあり,インストールできませんでした。15年以上前のものなので...(関係ないですけど,仮想PC内でWin3.1,1秒で起動してびっくりした...)

[ メッセージ編集済み 編集者: YAS 編集日時 2007-08-28 13:54 ]
MCP
会議室デビュー日: 2007/06/22
投稿数: 6
投稿日時: 2007-08-28 14:33
どっちにせよ、内部的に開かないとシート存在チェックは出来ないと
いう事なんですよね。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-08-28 16:04
人様の質問にはスルーで自分の質問だけさっさと答えろってやつは自己中だよねぇ。
それにしても冷静によくやるなぁ。
YAS
ベテラン
会議室デビュー日: 2006/02/15
投稿数: 59
投稿日時: 2007-08-28 17:52
例えば,
Debug.Print (ExecuteExcel4Macro("'D:\[Book1.xls]Sheet1'!R1C1"))
とすれば,「Book1.xls」に「Sheet1」があれば,「A1」の値が表示されます。
「Sheet1」がなければ「エラー 2023」が表示されます。

ちなみに「Book1.xls」がないとファイルを選択するダイアログが開いてしまいます。

次のように関数化すれば使えるのではないかと思います。

コード:

Public Function SheetExists(path As String, file As String, sheet As String) As String
On Error GoTo ERRHANDLER
If Dir(path & "\" & file) = "" Then
SheetExists = "File Not Found"
Exit Function
End If
If CStr(ExecuteExcel4Macro("'" & path & "\[" & file & "]" & sheet & "'!R1C1")) <> "エラー 2023" Then
SheetExists = sheet
Else
SheetExists = "Sheet Not Found"
End If
Exit Function
ERRHANDLER:
SheetExists = "Error"
End Function



次のように呼び出します。

Debug.Print (SheetExists("D:", "book1.xls", "Sheet1"))

かなり大きいファイルでもすぐにチェックができるので内部的に開いていないと思います。


[ メッセージ編集済み 編集者: YAS 編集日時 2007-08-28 17:54 ]
1

スキルアップ/キャリアアップ(JOB@IT)