プロが教えるわが家の防犯対策術!

ACCESS2007を使用しています。

マクロで、パラメータ付きのクエリを動かしたいのですが、
どのようにパラメータをセットすればよいのでしょうか。

そのままマクロを実行すると、パラメータを要求するboxが表示されます。
本来なら、パラメータには初期値をセットして、何も手を加えずにマクロを実行したいのです。

よろしくお願いします。

A 回答 (5件)

No.1です。



> この、「キー送信」というアクションがないような・・・

Access2007では、初期設定では、一部のアクションしか表示されなく
なっています。

「キー送信」など、全てのアクションを表示させるには、適当なマクロを
デザインビューで開いて、『デザイン』リボンの『表示/非表示』タブの
『すべてのアクションを表示』ボタンをクリックしてオン(オレンジ色表示)に
して下さい。

・・・なのですが・・・(汗)

> コードAには、[forms]![フォーム画面]![txtコードA]としています。

前回の回答は、「[forms]![フォーム画面]![txtコードA]」の形ではなく、
「[検索条件は?]」といった1組の角括弧で括ったパラメータを条件に
したものを想定していました(=フォームが開いているかどうかに関わらず
常にパラメータダイアログが出るタイプ)。
この場合でも「キー送信」でパラメータを渡すことはできるのですが、
前回回答でも触れたように、「キー送信」は確実性に欠けます。

ですので、フォーム参照型のクエリなのでしたら既に回答がある通り、
クエリ実行前にフォームを開くか、フォーム自体に今回のクエリを開く
ボタンを設置するか、で対応された方がよいと思います。

なお、フォームとクエリを開いた後、「閉じる」アクションを使って、すぐに
そのフォームを閉じているようでしたら、「フォームを開く」アクションでは
『ウィンドウ モード』引数を「非表示」にすることをお勧めしておきます。

また、今後「パラメータを初期値以外にしたい」といった場合があれば、
「フォームを開く」と「クエリを開く」の間に、「値の代入」を指定して、
「[forms]![フォーム画面]![txtコードA]」に値を入力することもできます
ので、併せて参考まで。


※Accessは、「現在開いているフォームの一覧」のようなものを内部に
 持っています(=Formsコレクション)。
 「[Forms]![フォーム画面]」というのは、このコレクションの中から、
 「フォーム画面」という名前のものを参照する、という意味です。
 従って、「フォーム画面」が開いていない状態では、コレクションに
 該当するものが見つからないため、パラメータダイアログで値が要求
 されることになります。
    • good
    • 0
この回答へのお礼

DexMachinaさん、ありがとうございます。

>「キー送信」というアクションがないような・・・
質問した後にすぐわかりました。
すべて最初から表示されていたわけではなかったのですね。


>クエリ実行前にフォームを開くか、フォーム自体に今回のクエリを開くボタンを設置するか、で対応された方がよいと思います。
「キー送信」が確実性に欠けるようでしたら、この方法で試してみます。

参考になりました。
また、よろしくお願いします。

お礼日時:2009/09/07 09:54

>ただ、これだけのことでよかったのかな。



フォームを閉じたまま手作業でクエリを開くとパラメータ入力のダイアログが表示されますが、フォームを開いておけばダイアログを表示することなくクエリを開くと思います。それと同じです。
クエリに「[forms]![フォーム画面]![txtコードA]」を設定しても、閉じたフォームを自動的にメモリに読み込まんだりはしないということでしょう。
    • good
    • 1
この回答へのお礼

cistronezkさん、ありがとうございます。

基本的なことをわかっていなかったようです。

助かりました。
また、よろしくお願いします。

お礼日時:2009/09/07 09:49

>コードAには、[forms]![フォーム画面]![txtコードA]としています



フォーム「フォーム画面」を開いた状態でも駄目ということでしょうか?

この回答への補足

cistronezkさん、こんにちわ。

先ほどの補足に、
(1)アクションには、”クエリを開く”を指定・・・
 としましたが、この前に、
アクションとして、”フォームを開く”を設定すると、うまくいきました。
ただ、これだけのことでよかったのかな。

補足日時:2009/09/04 15:09
    • good
    • 0

>そのままマクロを実行すると、パラメータを要求するboxが表示されます。



どういうマクロでしょうか?

この回答への補足

ACCESS2007のマクロ作成にて、
まず、
(1)アクションには、”クエリを開く”を指定、
 引数には、”クエリ名”、”データシートビュー”、モードは”編集”としています。
ここで使われるクエリは、パラメータを要求するクエリです。
具体的には、コードAという列に、フォームで入れられた値で選択しようとしています。
コードAには、[forms]![フォーム画面]![txtコードA]としています。

今回は、このクエリをフォーム画面からではなく、別の使い方で、
マクロを使って指定した値でクエリを動かしたいのです。
マクロの中で、この”[forms]![フォーム画面]![txtコードA]”にセットすればいけるのではないかと思うのですが、その方法がわかりません。
上記(1)の前に何かが必要なのでしょうか。

補足日時:2009/09/04 10:02
    • good
    • 1

> マクロで、パラメータ付きのクエリを動かしたいのですが、


> どのようにパラメータをセットすればよいのでしょうか。

クエリそのものを編集(または複製)して、パラメータの代わりに
セットしたい初期値を条件に指定、では問題があるのでしょうか(汗)


・・・とりあえず、問題がある、と仮定して、「キー送信(SendKeys)」を
使用した一案を提示しますが、この方法は通常の方法に比べて
動作の確実性が落ちますので、あまりお勧めできません(汗)

【「マクロ」オブジェクトの場合】
 「クエリを開く」アクションの前に「キー送信」アクションを追加します。
  ・「キー操作」引数には、「(パラメータに渡す値){Enter 2}」を指定。
   ※パラメータの初期値が「Test」なら、
     Test{Enter 2}
    と指定。
  ・「待機」引数は、既定値の「いいえ」のまま

【モジュール(VBA)の場合】
 「DoCmd.OpenQuery」の前に「SendKeys」を追加します。
 ※パラメータの初期値が「Test」の場合、
   SendKeys "Test{Enter 2}", False
  と指定。
  

※「{Enter 2}」は、Enterキーを2回押す動作を意味します:
 ・IMEがオンになっている場合、1回目で文字変換の確定を、2回目は
  パラメータダイアログのOKボタンのクリックを、それぞれ行います。
 ・IMEがオフの場合は、選択クエリならデータシート内の移動に
  なるだけですが、追加クエリなどの場合は確認メッセージで
  既定のボタンを自動でクリックしたことになるので注意が必要です。
  IMEを確実に制御できるなら、オフにした上で、「{Enter 2}」を
  「{Enter}」(=Enterキーの送信を1回のみ行う)にした方が無難です。

この回答への補足

DexMachinaさん、こんにちわ。

初歩的なことなのかもしれませんが、
>【「マクロ」オブジェクトの場合】
> 「クエリを開く」アクションの前に「キー送信」アクションを追加.
この、「キー送信」というアクションがないような・・・

ACCESS2007では別の表現になったのでしょうか。

おそらく、この方法がいければしたいことができる気がします。

補足日時:2009/09/04 10:19
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A