Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


635 / 2272 ツリー ←次へ | 前へ→

【10833】開いてるフォームの確認 TATSUYA 08/12/3(水) 17:50 質問[未読]
【10834】Re:開いてるフォームの確認 Gin_II 08/12/3(水) 18:10 回答[未読]
【10835】Re:開いてるフォームの確認 TATSUYA 08/12/4(木) 12:15 発言[未読]
【10837】Re:開いてるフォームの確認 Gin_II 08/12/4(木) 22:09 発言[未読]
【10839】Re:開いてるフォームの確認 TATSUYA 08/12/5(金) 10:19 発言[未読]
【10840】Re:開いてるフォームの確認 Gin_II 08/12/5(金) 10:30 回答[未読]

【10833】開いてるフォームの確認
質問  TATSUYA  - 08/12/3(水) 17:50 -

引用なし
パスワード
   アクセス初心者でよく分からないのでご教授願います。
聞きたい内容ですが、クエリの抽出条件の設定で

[フォームA]と[フォームB]があるとして
[フォームA]が開いているときは[フォームA]![値]を
[フォームB]が開いているときは[フォームB]![値]を
代入したいのですが、どういった内容にすればいいのでしょうか?

よろしくお願いします。

【10834】Re:開いてるフォームの確認
回答  Gin_II  - 08/12/3(水) 18:10 -

引用なし
パスワード
   > [フォームA]と[フォームB]があるとして
> [フォームA]が開いているときは[フォームA]![値]を
> [フォームB]が開いているときは[フォームB]![値]を
> 代入したいのですが、どういった内容にすればいいのでしょうか?

SysCmd メソッドを利用すると、クエリからでもフォームが開いているか
どうかを確認することができます。

SysCmd(10,2,"フォーム名")
ただ、IIf 関数や、Switch 関数で分岐してやったとしても、すべての式を
評価してしまうため、

Eval("Forms!フォーム" & IIf(SysCmd(10,2,"フォームA")=1,"A","B") & "!コントロール名")

のようにしてみたら、どうでしょうか?

【10835】Re:開いてるフォームの確認
発言  TATSUYA  - 08/12/4(木) 12:15 -

引用なし
パスワード
   >Eval("Forms!フォーム" & IIf(SysCmd(10,2,"フォームA")=1,"A","B") & "!コントロール名")
>
>のようにしてみたら、どうでしょうか?

ご回答ありがとうございます。
早速入力してみたのですが「式に未定義関数 Syscmd があります」
というエラーで実行できませんでした。
何か問題あるのでしょうか?

【10837】Re:開いてるフォームの確認
発言  Gin_II E-MAIL  - 08/12/4(木) 22:09 -

引用なし
パスワード
   >早速入力してみたのですが「式に未定義関数 Syscmd があります」
>というエラーで実行できませんでした。

あれ。こちらではきちんと動作したんですけどね。
とりあえず、参照設定を確認してみてください。

VBEの画面で、「ツール」→「参照設定」で、参照不可 となっている
項目があれば、チェックをはずしてみてください。

【10839】Re:開いてるフォームの確認
発言  TATSUYA  - 08/12/5(金) 10:19 -

引用なし
パスワード
   >VBEの画面で、「ツール」→「参照設定」で、参照不可 となっている
>項目があれば、チェックをはずしてみてください。

上記操作で確認しましたが、参照不可となっているチェックはなく
参照しに行く項目が表示されており、全てにチェックを入れても
同じ現象でした。

そこで一つ質問なのですが

Eval("Forms!フォーム" & IIf(SysCmd(10,2,"フォームA")=1,"A","B") & "!コントロール名")

の内容で最初の"Forms!フォーム"とは何を指すのでしょうか?
私の理解では[フォームA]と[フォームB]があって、そこにそれぞれ[入力値]
というコントロールがあるとします。

そうした場合に
Eval("Forms!" & IIf(Syscmd(10,2,"フォームA")=1,"[フォームA]","[フォームB]"
& "![入力値]")とした場合
Syscmd(10,2,"フォームA")=1の場所で開いているフォーム名がフォームAで
あった場合1を返すのでTrue、フォームAでなければNullを返すので1ではない
となり、Trueであった場合クエリの検索条件に
Forms![フォームA]![入力値] が代入されその条件で検索する
でTrueでなければ
Forms![フォームB]![入力値] が代入されその条件で検索する
になると理解しました。

なので"Forms!フォーム"のフォームが何を指すのか分からなかったので
単純に"Forms!"としましたが、間違いでしょうか?

【10840】Re:開いてるフォームの確認
回答  Gin_II  - 08/12/5(金) 10:30 -

引用なし
パスワード
   >
> の内容で最初の"Forms!フォーム"とは何を指すのでしょうか?
> 私の理解では[フォームA]と[フォームB]があって、そこにそれぞれ[入力値]
> というコントロールがあるとします。

Forms!フォーム名!コントロール名
という書式で記述する必要があります。

で、

> Eval("Forms!フォーム" & IIf(SysCmd(10,2,"フォームA")=1,"A","B") & "!コントロール名")

こちらについては、

Forms!フォームA!コントロール名
Forms!フォームB!コントロール名

のような結果になるように、"A"/"B" の部分を、IIf 関数と、SysCmd 関数を使って
設定しています。


> なので"Forms!フォーム"のフォームが何を指すのか分からなかったので
> 単純に"Forms!"としましたが、間違いでしょうか?

ということで、これでは間違っていますね。

635 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078199
(SS)C-BOARD v3.8 is Free