ADODBレコードセットを使用してユーザーフォームにデータを取り込むためにExcelワークシートからデータを取得するVBAコードを記述しました。ワークシートは、コードが実行されるたびに新しいデータに置き換えられます。ADO Recordsetは古い(失効した)データを返します
数週間前の時点で、レコードセットオブジェクトが正しいデータを返さず、以前のセッションで使用されたデータを返す問題が発生しました。これは、Excelファイルを閉じてから再度開いた後でも発生します。
たとえば、データセットAでコードを実行してから、Excelファイルを閉じます。私はExcelファイルを開いて、ワークシートをデータセットBに置き換えて、コードを実行します。データセットBを返すのではなく、データセットAを返します。実際にワークシートにはAというデータセットBが含まれていることが確認されました。 背景情報を追加するには、 JETではなくACE接続文字列。私はJET接続文字列でエラーが発生し始めたので、この移行を余儀なくされました。私が使用した接続文字列は、以下で見つけることができます。
この問題に関するフィードバックはありがたいです。さらに情報が必要な場合は、私に知らせてください。
strConnString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & mstrFile & ";Extended Properties=""Excel 12.0 Macro;HDR=YES;IMEX=1"""
質問がいくつかあります。まず、このVBAコードはどこにありますか?私は、それが本当に問題ではない場合は、データを含む同じExcelファイルではないと仮定しています。別のファイル/アプリケーションでVBAコード_is_が使用されている場合、実際にコードを実行するためにデータ内のデータが開いている必要はありません。次に、Excelを再オープンし、データを変更してからコードを再実行するとします。コードを再実行する前に、変更されたExcelを保存しますか? – Skippy
VBAコードはマクロ対応のExcelファイルに存在し、ワークシート内のデータも同じです。 Excelファイルは、コードを再実行する前に保存されません。 –
VBAコードとデータは同じ* Excelファイルにありますか?では、なぜ接続文字列が必要なのですか?しかし、接続文字列を使用している場合は、ファイルを保存しないと問題が解決される可能性があります。ファイルを編集している間、接続文字列はファイルの元の保存されていないコピーを指しています。コードを実行する前にファイルを保存し、これが機能するかどうか確認してください。 – Skippy