- PR -

VBAでExcelワークシートにADO接続するとExceが開いてしまう

1
投稿者投稿内容
fujio
会議室デビュー日: 2007/04/27
投稿数: 3
投稿日時: 2007-04-29 05:58
お世話になります。
VBAでファイルサーバ上で共有している複数ExcelファイルにADO接続しワークシートのデータ取得をしているのですが、接続するExcelファイルが既に他のマシンから開かれている場
合はExcelファイルが開いてしまい、データ取得は失敗してしまいます(開かれていなければデータ取得は成功します)

調べてみたところ、Connection生成直後にExcelファイルが開かれるので「何かプロパティ設定があるのでは」と色々調べてみたのですが判りません。どなたか上記の場合でもデータ取得できる方法をご存知でしたらお教え下さい。
(それともこのような方法は不可能なのでしょうか?)

とりあえずConnection生成部分のコードを乗せておきます。
Set MyCon = New ADODB.Connection
With MyCon
.Mode = adModeRead
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & connect_pass & ";" _
& "Extended Properties="" Excel 8.0 ; HDR=No;"""
.Open
End With

※connect_passには接続Excelファイルのフルパスが入ります。

よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-29 08:08
OleDb で Excel プロセスが残る [atmarkit.co.jp]

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
fujio
会議室デビュー日: 2007/04/27
投稿数: 3
投稿日時: 2007-04-30 07:31
じゃんぬねっとさん、ありがとうございます。

そうですかあ、一時ディレクトリにコピーですかあ。
今回この処理対象を置いているファイルサーバは遅いのでコピーはあまりしたくないです。それに対象ファイルは名前だけでは完全に特定できないので、コピーするとしたらディレクトリ下まるごとなのですが、それだと不要なファイルが多くなるかなと。。。。

どうも不可能な気がしてきましたが、どなたか良い方法ご存知の方いらっしゃいましたらお教えください。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-04-30 08:49
引用:

fujioさんの書き込み (2007-04-30 07:31) より:

それに対象ファイルは名前だけでは完全に特定できないので、コピーするとしたらディレクトリ下まるごとなのですが、それだと不要なファイルが多くなるかなと。。。。


今回の OleDB の件と "対象ファイルの名前が特定できない" は何ら関係ないのでは?
また、"不要" だと自身で仰るくらいなら必要なものだけをコピーすれば良いでしょう。

事情が読めません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2007-04-30 10:53
引用:

fujioさんの書き込み (2007-04-29 05:58) より:
VBAでファイルサーバ上で共有している複数ExcelファイルにADO接続しワークシートのデータ取得をしているのですが、接続するExcelファイルが既に他のマシンから開かれている場
合はExcelファイルが開いてしまい、データ取得は失敗してしまいます(開かれていなければデータ取得は成功します)


以下、的外れなことを書くかもしれませんが、なぜ Excel のファイルを ADO の .xls ファイル用のドライバーでオープンすると、Microsoft Excel のアプリケーション自体が立ち上がってしまうのでしょうか?
これって .mdb ファイルを ADO でオープンすると Microsoft Access が起動するようなものですよね。でも Access ではそういうことはないですよね。Excel だけで起こりうることがあるのでしょうか?
Excel のアプリケーションを起動するイベントとなるのは、EXE 自体を起動するか、OLE で起動するか、DDE で起動するかだと思うのですが、今回の場合はなにがきっかけとなって起動しているのでしょう?ただ単に、ご質問内容とは別の所で独自に Excel のアプリケーションを起動していて、それがたまたま ADO を使ったときに、画面の表(おもて)に見えるように現れているだけ、などということはないのでしょうか?

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
fujio
会議室デビュー日: 2007/04/27
投稿数: 3
投稿日時: 2007-04-30 21:37
じゃんぬねっとさん、説明不足ですみません。
 OleDb で Excel プロセスが残る [atmarkit.co.jp]
の回答で「処理対象となる Excel Workbook を一時ディレクトリにコピーして処理を実行」とのことでしたが、私の場合は処理対象にするかどうかファイル名だけでなくファイル内容も見て判断させているため、一時ディレクトリにコピーするとなると対象ディレクトリ下すべてのファイル(まあ、拡張子xlsだけですが)をコピーする必要があり、コピーしても処理対象にしないファイルが大量に出てしまうため、「不要なファイルが多くなる」と思いました。

unibonさん、返信ありがとうございます。
別のところでExcelアプリケーションは動いておりません。
ステップ実行させると、Connectionオブジェクトの生成(.Openの所。私が最初に載せたコードを参照下さい。)直後に該当Excelファイルが開いてしまいます。この現象は共有ファイルが他のマシンから開かれていると発生します。(開かれていなければ問題なく処理できます)

何かの制限事項なんですかねー。幸い意図せずOpenされたExcelファイルをCloseするロジックを入れて処理続行できたので、今回の問い合わせはcloseさせていただきます。回答していただきありがとうございました。
1

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