- ベストアンサー
AccessにてExcelファイル名にパラメーター情報を追加
初めての投稿となります。 よろしくお願いいたします。 Accessにて年月日をパラメーター入力すると、該当年月日のDATAを抽出するクエリを作成しました。 現在はマクロにて自動的にデスクトップに該当DATAをExcelファイルに変換は出来るようになっておりますが、自動的にそのExcelファイル名の頭に入力したパラメーター情報を追加したいのですが、どのようにすれば出来るのでしょうか? 現在のファイル名: 情報.xls 自動作成時希望ファイル名:20090415情報.xls [20090415]がパラメーター入力情報です。 どうぞ宜しくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VBAになれた方なら、VBAでSQL文を作って実行するようなやり方をするでしょう。 ーー あえてそれに踏み込まず、 もう少し簡単に出来る方法を述べてみます。 Moduleに、ですが Sub test02() x = InputBox("年月日") MsgBox x 'DoCmd.OpenQuery "クエリ1" DoCmd.TransferSpreadsheet acExport, 8, "クエリ1", "C:\Documents and Settings\xxxx\デスクトップ\" & x & "名簿原本.xls", False End Sub (xxxxは自分のユーザーIDなどの質問者の実情に合わせること) と入れて、実行します。 年月日を聞いてきます。文字列で入れます。年月区切りに/を入れる方式はうまくいかなかったので、20090416のようにしてテストした。 上記クエリ1は私の場合、パラメータクエリで、パラメータを聞いてきますから入れます。私の場合は条件は年月ではなかったですが。 これでデスクトップに検索(選択)結果のデータのエクセルファイルが出来ました。シート名はクエリ名。 クエリを作るとき、表示フィールドが2度同じものを指定しないようにします(重複した・・のエラーが出ますから。私は出しちゃった) ーーーー 上記を実行したとき聞いてきた年月日が、質問者の場合、クエリのパラメータで有るようです。クエリ1に上記xの文字列をプログラムで渡せればよいのですが、不可能ではないかと(現状小生には判りません)思います。 簡単さを求めた(アクセスのマクロを使おうとしたため)ためですが、重複入力がイヤならこの回答は無視してください。 VBAでSQLを扱う方式を勉強してください。
その他の回答 (1)
- DexMachina
- ベストアンサー率73% (1287/1744)
> [20090415]がパラメーター入力情報です。 このパラメータですが、クエリのデザインビューの『抽出条件』 部分に『[年月日]』といった形で入力を要求するようにしている、 ということでよろしいでしょうか。 だとすると、マクロからその値を参照するのは難しいと思います。 (少なくとも私は(VBA使用時を含めて)その方法を知りません(汗)) ですので、Excelファイルを作成するマクロを設置したフォームに テキストボックスを追加し、その値を、「クエリの抽出条件」と 「ファイル名」に使い回す、という代替案を提案します。 具体的には、以下の通りです(フォーム名が「フォーム1」、 テキストボックス名が「年月日」だった場合): 【クエリ】 <現在の抽出条件の式> [年月日] <変更後の抽出条件の式> [Forms]![フォーム1]![年月日] (パラメータ入力ダイアログは表示されなくなります) 【マクロ】 a)『アクション』に「出力」を指定している場合: ※この場合は、AccessのバージョンによってはExcel5.0という 古いExcelの仕様に従っているらしく、16000行程度までしか 出力されないので要注意。 <現在の『出力ファイル』欄の式> c:\~~\情報.xls <変更後の『出力ファイル』欄の式> ="c:\~~\" & Forms!フォーム1!年月日 & "情報.xls" b)『アクション』に「ワークシート変換」を指定している場合: <現在の『ファイル名』欄の式> c:\~~\情報.xls <変更後の『ファイル名』欄の式> ="c:\~~\" & Forms!フォーム1!年月日 & "情報.xls" ※拡張子を省略すると、「出力」アクションでは拡張子なしで、 「ワークシート変換」アクションでは『ワークシートの種類』 欄で指定したものに対応する拡張子が追加された状態で、 それぞれ出力されるようです。 (WinXP・Access2003での確認結果)
お礼
詳しくアドバイス頂き有難うございます。 早速試します。
お礼
アドバイス有難うございます。 早速試してみます。