webdevqa.jp.net

ExcelからAccessクエリにパラメータを渡す

私はAccess(2010ですが、Office 2003も試しました)データベースを持っており、フォームに入力されたデータに依存する多くのテーブル、フォーム、ネストされたクエリがあります。 WHERE query1.year=[Forms]![Form1]![Text0];。このようなクエリを外部データソースとしてExcelにリンクしたいのですが、これにより問題が発生します。

標準的なアプローチ「データ->アクセスから」を使用すると、フォームに依存するクエリは表示されません。別のクエリへのリンクを作成し、その後、接続プロパティウィンドウのコマンドテキストを変更して、実際に必要なクエリを指すようにすると、エラーメッセージが表示されます(「クエリが実行されなかったか、データベーステーブルを開くことができませんでした。 ")。

MS Query([データ]-> [他のソースから]-> [Microsoft Query])を使用すると、必要なクエリを選択できますが、「パラメーターが少なすぎます。1が必要です。」というエラーメッセージが表示されます。

もちろん、クエリはExcelで使用できないフォームに依存しているため、これは完全に理にかなっています。これらのクエリで「実際の」クエリパラメータを使用しようとしましたが、同じことです。 Excelで特定のセルの値を取得し、それをパラメーターとしてAccessクエリに渡す必要があります。

したがって、理想的な世界は次のようになります。Accessには、パラメータに依存して作業を行うクエリがたくさんあります。 Access内で、フォームを使用してユーザーがこれらの値を入力できるようにすることができます。 Excelから、これらのパラメーターは指定されたセルから取得する必要があります。これは可能ですか?

4
CaptainProton

キャプテン、

DAO.querydefとその「パラメータ」プロパティを使用してこれを行うことは90%確実です。パラメータなしでクエリを書き直してから、Excelのクエリマネージャを使用することもできます。これらの両方のアイデアのヘルプについては、 http://www.dailydoseofexcel.com/archives/2004/12/13/parameters-in-Excel-external-data-queries/ から始めることができます。

2
Doug Glancy

どうしても必要な場合を除いて、保存されたクエリでフォームコントロールを参照することはありません。これは、フォームが開いていることへの外部依存により、クエリの使用範囲が狭くなるためです。

Accessは、実行時にレコードセットに基準を適用する複数の方法を提供するため、フォームコントロールへの依存関係をハードワイヤードする必要はほとんどありません。

そうは言っても、DDEを使用してデータベースに接続できれば、その仕事を実行できるはずです。 DDEは、AccessデータベースからのWordマージのデフォルトでした(私の永遠の迷惑に)。 Accessの新しいインスタンスを起動し(つまり、ユーザーレベルのセキュリティが設定されている場合は、ユーザー名/パスワードのプロンプトで待機し、データベースを開かない)、古いスタイルのDDEコマンドを介して通信します。 。あなたの場合、データベースのスタートアップユーティリティで必要なフォームを開くと機能するはずです。ただし、実行時にユーザーがデータを入力する必要がある場合は、それも機能しません。

究極の解決策は、保存したクエリをフォームから切り離すか、Excel内で生のSQL文字列を使用してデータを取得することです(フォーム参照がない場合)。

1
David W. Fenton