※ ChatGPTを利用し、要約された質問です(原文:ADOで別ユーザが開いているエクセルを読み込む方法)
ADOで別ユーザが開いているエクセルを読み込む方法
このQ&Aのポイント
VisualBasic.NETからADOを使用して別ユーザが開いているEXCELブックの内容を読み込む方法を教えてください。
既に別ユーザが開いているEXCELブックをADOで開こうとするとエラーが発生します。他のユーザに開かれているEXCELブックの内容を読み取る方法を教えてください。
ADOを使用して他のユーザが開いているEXCELブックを読み込もうとするとエラーが発生します。COMコンポーネントのEXCELライブラリを使用する方法以外で、他のユーザが開いているEXCELブックを読み込む方法を教えてください。
ADOで別ユーザが開いているエクセルを読み込む方法
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を使う事は出来ない状況です。
何か良い手段は御座いませんでしょうか?
詳しい方が居られましたらご教示頂きたく思います。
補足
ご回答ありがとうございます。 なるほど、その手は思いつきませんでした。 OPEN時に異常をキャッチしたらコピーして、そのコピーからやり直す方法を試してみます。 ただ、本当ならそのような事せずにADOで読んでしまいたい所ではあります... とにかく、”出来ない”状態を”出来るに”まずは持って行く事を優先したいと思います。