VisualBasic.NETからADOをEXCELデータで使用して、ブック内のシート内容を読み出して集計するソフトを作っています。
題名の通りなのですが、既に別ユーザが開いているEXCELブックの内容をADOを使って読み出すにはどうすれば良いでしょうか?
開かれていない状態のEXCELなら問題なく読めるのですが、既に別ユーザに開かれているEXCELを読もうとするとエラーとなってしまいます。
以下、ソースコードの一部です。
コメントアウト箇所はいろいろ試した残骸です。
fsに開こうとしているEXCELパスが入ってます。
rsExcel = CreateObject("ADODB.Recordset")
cnExcel = CreateObject("ADODB.Connection")
'cnExcel.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
' "DBQ=""" & fs(ii) & """;"
'With cnExcel
' .Provider = "MSDASQL"
' .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
' "DBQ=" & fs(ii) & "; ReadOnly=True;"
' .Open()
'End With
'System.IO.File.Open(fs(ii), IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
With cnExcel
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & fs(ii) & ";" & _
"Extended Properties=Excel 8.0;"
.Open()
End With
cnExcel.Mode = ADODB.ConnectModeEnum.adModeRead
cnExcel.Open()
sSQL = "SELECT * FROM [" & SheetName & "$]"
rsExcel.Open(sSQL, cnExcel, ADODB.CursorTypeEnum.adOpenForwardOnly, ADODB.LockTypeEnum.adLockReadOnly)
どの方法を試してもOPENしようとする所でエラーとなります。
エラーメッセージ「ファイル '' を開くことができませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。」
既に誰かが使用中の.xlsをダブルクリックしてEXCELで開けば、読み取り専用ですが開けて内容が読める訳ですが、それをADOで行う事は出来ないんでしょうか?
COMコンポーネントのEXCELライブラリのWORKBOOKS.OPENで読み取り専用で事前に開いた後にADOでOPENすれば読めたのですが、ソフトをインストールする予定のPCはEXCEL未インストール状態なのでCOMを使う事は出来ない状況です。
何か良い手段は御座いませんでしょうか?
詳しい方が居られましたらご教示頂きたく思います。
No.1ベストアンサー
- 回答日時:
対象の Excel ファイルを一時的に別名 (必要であれば別の場所に) コピーして、コピーしたものを開くようにしたらどうだろうか。
これなら 「対象のファイルが存在するか」 というチェックを事前に行うことも可能なので、誰かが対象のファイルを間違って消してしまった場合にもプログラムでエラーを検知できる。
この回答への補足
ご回答ありがとうございます。
なるほど、その手は思いつきませんでした。
OPEN時に異常をキャッチしたらコピーして、そのコピーからやり直す方法を試してみます。
ただ、本当ならそのような事せずにADOで読んでしまいたい所ではあります...
とにかく、”出来ない”状態を”出来るに”まずは持って行く事を優先したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL ポストグレにあるExcelファイルを開くには 1 2022/12/13 18:07
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) ExcelのVBAでWordを読み取り専用で開いて、見たいページに自動で移動する方法を教えて頂きたい 4 2022/07/27 10:39
- Excel(エクセル) Excelが読み取り専用になる件について 5 2022/10/13 09:53
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) csvファイルをExcel形式で読み込むには 2 2023/07/03 13:09
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Accessのテーブルを既存のExcelファイルへエクスポートしたいんですが
Access(アクセス)
-
ADOを使用して、パスワードの設定されているエクセルファイルを開く方法
Microsoft ASP
-
ADOを使用してExcelファイルをオープンした場合にリソースが解放されない
Visual Basic(VBA)
-
-
4
VBAでCSVファイルが使用中かどうかの確認
Visual Basic(VBA)
-
5
EXCEL VBAで複数人でのADO接続について
その他(プログラミング・Web制作)
-
6
Excel VBAでほかのアプリケーションで使用中(ロック)のファイルを上書き保存したい
その他(プログラミング・Web制作)
-
7
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
8
ADOで複数のBookから抽出
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DATファイルをEXCELで開きたい
-
エクセルのフィルタ抽出が固まる
-
データをCSVでエクスポートしたい
-
マスタメンテとは?
-
ADOで別ユーザが開いているエク...
-
ACCESSで名前を付けて保存は・・
-
Access2002★MDEファイルを修正...
-
ファイルメーカー(FileMaker)...
-
Oracle8iのデータをOracle8へ移...
-
ファイルメーカーで変更禁止を...
-
大混乱を極めている顧客名簿を...
-
accessの処理が遅い
-
ACCESS2003での150人同時利用
-
SQL*Loaderのコミットポイント...
-
PostgreSQLのDB復元
-
【DB】同じトランザクション内...
-
復旧中のデータベースについて
-
postgresql についてです
-
オラクルのロールバックセグメ...
-
OracleのROWIDについて…
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DATファイルをEXCELで開きたい
-
accessの処理が遅い
-
DAOファイルのSQLクエリの部分...
-
エクセルのフィルタ抽出が固まる
-
SQL*Loaderのコミットポイント...
-
ファイルの存在チェック
-
マスタメンテとは?
-
ファイルメーカーで変更禁止を...
-
SQLローダーで複数のCSVファイ...
-
ACCESS2003での150人同時利用
-
VSAM,QSAM,BSAM,BPAM,BDAM
-
ACCESSで名前を付けて保存は・・
-
テキストで空欄(null?)を検索...
-
ファイルメーカーで画像を参照...
-
SQLローダーを使ってExcelのデ...
-
ポストグレにあるExcelファイル...
-
データをCSVでエクスポートしたい
-
バッチファイルで2つのファイル...
-
アクセス2010 主キーのID...
-
大量データから抽出する効率よ...
おすすめ情報