クエリーで計算して出した結果をもとにフォームを使って検索をしたいのですが、うまくできません。
クエリーの計算式は誕生日から年齢を出すものが入っています。
フォームのボタンにVBAで
'年齢
If Me!年齢開始.Value <> "" Then
Age1 = "(Q_メイン.年齢 >= " & "0" & " and =< " & Me!年齢終了.Value & ")"
WhereCond = WhereCond & tempOper & Age1
End If
WhereCond = Mid(WhereCond, strCount + 1)
DoCmd.OpenForm "F_検索結果", acNormal, , WhereCond
となっています。
tempOperは、検索方法がORとANDが選べるようになっていて、それの結果が入っています。
No.9ベストアンサー
- 回答日時:
補足ありがとうございます。
ひょっとして年齢1フィールドはテキスト型だったりして・・・?
だとしたら
Age1 = "(Q_メイン.年齢1 between " & "0" & " and " & Me!年齢終了.Value & ")"
を
Age1 = "(Val(Q_メイン.年齢1) between " & "0" & " and " & Me!年齢終了.Value & ")"
にしてみてください。
頑張ってください(^o^)丿
No.8
- 回答日時:
>If Len(Nz(Me!年齢開始,"")) > 0 Then
Age1 = "([Q_メイン].[年齢1] Between 0 And " & Me!年齢終了 & ")"
End If
>([Q_メイン].[年齢1] Between 0 And 16)
となりました。
リテラルが悪いんです。
([Q_メイン].[年齢1] の部分を変数として認識していません。
後ろの年齢終了のほうはちゃんと16と変換されています。
計算式があってるかは見てません。
If Len(Nz(Me!年齢開始,"")) > 0 Then
Age1 = "(" & [Q_メイン].[年齢1] & " Between 0 And " & Me!年齢終了 & ")"
End If
あともうちょっとかなー。
まだまだかもしれません。
元のクエリーとかソースレコードの指定も心配だし。
WhereCond = Mid(WhereCond, strCount + 1)って何がしたいのですか?引数が一個足りないような。。。
No.7
- 回答日時:
補足ありがとうございます。
年齢フィールドがNullになっているレコードがある、ということですね?
でしたら、
Q_メイン.年齢1
を
Nz(Q_メイン.年齢1)
にしてみてください。Nz関数は「Nullのときは0とする」という機能です。
頑張ってくださいヽ(^。^)ノ
回答ありがとうございます。
Age1 = "(Q_メイン.年齢1 between " & "0" & " and " & Me!年齢終了.Value & ")"
を
Age1 = "(Nz(Q_メイン.年齢1) between " & "0" & " and " & Me!年齢終了.Value & ")"
としてみましたが、同じエラーに…
指定の仕方が違うのでしょうか?
No.6
- 回答日時:
補足ありがとうございます。
それならDoCmd構文自体は問題なさそうですね。
「F_検索結果」フォームのレコードソースは「Q_メイン」なんですよね・・・?
そういえば、「うまくできません」って、具体的にどううまくいかないんですか?
この回答への補足
Age1 = "([Q_メイン].[年齢1] Between 0 And " & Me!年齢終了 & ")"
を別項目での検索、ということを試してみようと思い、
Age1 = "([Q_メイン].[年齢] Between 0 And " & Me!年齢終了 & ")"
としてみました。
(年齢1とは別に年齢という項目があります。)
こうしてみたところちゃんと検索されます!!
計算の仕方が悪いのかと思い、以下のようにかえました。
※Ageは独自関数
IIf(IsNull([1生年月日]),"",Age([1生年月日]))
↓ ↓ ↓
IIf(IsNull([1生年月日]),"0",Age([1生年月日]))
こうするときちんと出ます。
ということは「値が入ってない箇所があるから」ということになるようです。
空白を仮定した書き方はどのようにすればいいのでしょうか?
回答ありがとうございます。
>「F_検索結果」フォームのレコードソースは「Q_メイン」なんですよね・・・?
はい、そうです。
>「うまくできません」って、具体的にどううまくいかないんですか?
下にも書きましたが、
----------
実行時エラー '2501':
OpenForm アクションの実行はキャンセルされました。
----------
と出て終わってしまうんです。
No.5
- 回答日時:
補足ありがとうございます。
DoCmd.OpenForm "F_検索結果", acNormal, , WhereCond
の結果が思わしくないのですよね?
この直前で「MsgBox WhereCond」で確認してみてはどうですか?
これがおかしければ「MsgBox strCount」で確認と・・・
一つずつ確認して原因箇所を特定してみましょう。
頑張ってくださいヽ(^。^)ノ
回答ありがとうございます。
WhereCondは
(Q_メイン.年齢1 between 0 and 16)
strCount は
4
でした。
…どこかおかしいでしょうか?
特におかしいところが自分にはわからないのですが(><)
No.4
- 回答日時:
直接の回答ではないですが・・・
うまく行かないときは、変数の値をチェックしてみてください。
Age1を作成した直後に「MsgBox Age1」
WhereCondを作成した直後に「MsgBox WhereCond」
デバッグの基本です。
頑張ってくださいヽ(^。^)ノ
回答ありがとうございます。
Age1は
(Q_メイン.年齢1 between 0 and 16)
WhereCondは
OR (Q_メイン.年齢1 between 0 and 16)
と出ました。
これは何か手がかりになるでしょうか?
No.3
- 回答日時:
とりあえず、この部分だけで動作をするか確認してください。
If Len(Nz(Me!年齢開始,"") > 0 Then
Age1 = "([Q_メイン].[年齢1] Between 0 And " & Me!年齢終了 & ")"
End If
回答ありがとうございます。
If Len(Nz(Me!年齢開始,"")) > 0 Then
Age1 = "([Q_メイン].[年齢1] Between 0 And " & Me!年齢終了 & ")"
End If
に
MsgBox Age1
を付け加え実行したところ、
([Q_メイン].[年齢1] Between 0 And 16)
となりました。
No.2
- 回答日時:
こちらの続きですね。
OR(
(
(Q_メイン.年齢1 >= 10 and <= 16) OR
(Q_メイン.年齢2 >= 10 and <= 16)
)
) OR
(Q_メイン.年齢1 >= 10 and <= 16) OR
(Q_メイン.年齢2 >= 10 and <= 16)
))
括弧の数もあっていませんし、先頭の OR も余計ですね。
同じ条件も表示されてますが。。
あと、条件式もおかしいです。
フィールド名 >= 10 And フィールド名 <=16
のようにするか、
フィールド名 Between 10 And 16
のようにしてください。
この回答への補足
現在、この状態です。
'年齢
If Me!年齢開始.Value <> "" Then
Age1 = "(Q_メイン.年齢1 between " & "0" & " and " & Me!年齢終了.Value & ")"
WhereCond = WhereCond & tempOper & Age1
End If
WhereCond = Mid(WhereCond, strCount + 1)
とすると、
実行時エラー'2501':
OpenForm アクションの実行はキャンセルされました。
となります。
回答ありがとうございます。
>括弧の数もあっていませんし、先頭の OR も余計ですね。
Age1 = "(Q_メイン.年齢1 >= '0' and '& <=' & Me!年齢終了.Value )"
こういうことでしょうか?
ほかの箇所のフィールドを検索する際、まったく同じ構文で使えているので、間違いないと思っていたんですが。
between * and *
でもだめです。
>= * And <= *
はかえさせていただきました。
No.1
- 回答日時:
それぞれの形式(数字、日付、テキスト)をそろえてください。
日付なら、#2004/10/21#となるように#で囲んでくださいね。文字列なら、まぎらわしい " でなく ' を使うほうがわかりやすいですよ。
誕生日から年齢を出す計算式がどういうものかわかりませんが、もしかしたら、結果が文字列になっているのかもしれません。
年齢開始は""でくくっているなら、こちらが文字列になっているのかもしれませんね。
VBAに入っているスペースが全角の空白?
VBAに半角のスペースが足りない?
and と & のせいで動かなかったことがあります。
(どっちが悪いのか忘れましたが)
一度WhereCondに変数を使わない式を入れてみて、動いてから、その式を変数を使う式に書き換えてみるといいですよ。
いろいろ試してみてください。
回答ありがとうございます。
>誕生日から年齢を出す計算式がどういうものかわかりませんが、もしかしたら、結果が文字列になっているのかもしれません。
クエリで計算した結果の形式はどこで見たら…?
今まで特に気にしてなかったもので。
Age1 = "(Q_メイン.年齢 >= " & "0" & " and <= " & Me!年齢終了.Value & ")"
を
Age1 = "(Q_メイン.年齢 >= ' & '0' & ' and <= ' & Me!年齢終了.Value & ')"
や
Age1 = "(Q_メイン.年齢 >= ' & '0' & ' & <= ' & Me!年齢終了.Value & ')"
にしてみましたが、同じでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- Access(アクセス) Access 複数条件検索の設定が上手く行きません 1 2022/07/22 20:37
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) VBAチェックボックスで有効無効切り替えできるように 5 2022/10/21 16:13
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) VBA チェックボックスの設定について 1 2022/10/24 10:27
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「代」と「台」の使い方
-
女性に年齢聞く男性
-
女性にお姉さんという言い方し...
-
相手の歳が思ったより、若かっ...
-
平均初婚年齢で25.9歳とか小数...
-
33歳で 「私もついにこの年か...
-
年齢を聞かれた時のかわし方。 ...
-
異年齢保育について
-
30歳新卒看護師です
-
知能指数の計算方法について。
-
申込フォームに年齢を伺う項目...
-
(2)の「年齢の個体はk倍ずつ個...
-
りれきしょ
-
目上の人は敬わないといけない!?
-
30歳は三十路…50歳は?
-
朝倉未来は、 勝てもしない茶番...
-
複数の人(性別も年齢もバラバラ...
-
私へんかな、、、へんかー、、
-
男性にとって体の関係無しの交...
-
男性に質問です エッチ中に腟か...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「代」と「台」の使い方
-
女性に年齢聞く男性
-
年齢を聞かれた時のかわし方。 ...
-
30歳は三十路…50歳は?
-
20歳台?20歳代?
-
年齢はただの数字ですか?
-
女性にお姉さんという言い方し...
-
40歳ってもう年齢だけで恋愛対...
-
複数の人(性別も年齢もバラバラ...
-
平均初婚年齢で25.9歳とか小数...
-
ランク付けするときの同点の処...
-
年齢を聞きたがる人がいますが
-
相手の歳が思ったより、若かっ...
-
知能指数の計算方法について。
-
新しい職場、女の子は年下ばか...
-
5歳差のカップルです 年上彼氏...
-
申込フォームに年齢を伺う項目...
-
40代の中年独身ですが。現実を...
-
年齢を誤魔化す男性の心理につ...
-
「お誕生日おめでとう!」と言...
おすすめ情報