とある業務で、Access内でExcelブックをリンクテーブルで読む・・・という使い方をしてきた。
(AccessのmdbはNASにおいて共有している。Excelのxlsも同じく)
これはこれで便利なのだが、ユーザーから、ひとりの人がAccessを使っている間、もう一方の人がリンクテーブル先のブックをExcelで開こうとすると「編集のためロックされています」のメッセージが出る。
Excelは読み取り専用でしか開けないので、編集するケースはないのだが、Accessではそういってくる。
リンクテーブルを読んであれこれする業務は月に数度しかないのに、誰かがAccessのmdbを開いているだけでもその間、もう一方は閉じるのを待っていなければならない。これを何とかして欲しい・・・と、ずっと要望を受けていた。
しかし、いろいろ調べては見たものの、それを現在使っていなくてもExcelブックをリンクテーブルにしているだけでロックされるのは、なんともならないとずっと思っていて、そのように説明していた。
けども、以下のようなやり方があったとは。
リンクテーブルにせずにExcelシートをクエリで使う。 | MS Access Scrapbook
早速このやり方を使ってみた。
自分の業務だと、こんな感じ。
'Excel SELECT * FROM [EXCEL 12.0;HDR=Yes; DATABASE=C:\Users\Documents\スケジュール.xlsm].[全体$]; 'CSV text SELECT * FROM [Text;HDR=Yes; FMT=Delimited;DATABASE=c:\test].[rakuraku_item.csv];
クエリを実行中は、確かに今まで通りになるが、実行していない間は、これまでのようにExcelで該当ブックを開こうとしても、ロックのメッセージが出なかった。
しかも、一方のExcelブックを現在編集中で保存していなくても、Accessでクエリを実行すると何事もなく開き、それまで編集中の内容がクエリに表示されている・・・!
これは役立つ情報だ!!
情報源の方に感謝!
2021/4/14(水)追記:
Excelファイルに加え、CSVテキストファイルをクエリとして読むコードを追加!