いちばん失敗した人決定戦

AccessでPablic変数を日付範囲指定、クエリの抽出条件に指定したのですが、「抽出条件でデータ型が一致しません。」とのエラーメッセージで抽出出来ません。

【処理フロー】
1.フォームで、開始日と終了日をPublic変数へ格納
2.データ抽出クエリの日付条件に"GetData()"Public Functin VBAで変数を格納した値をクエリの抽出条件に返す。

《変数》
'開始日の宣言
Public sDate As Date
'終了日の宣言
Public eDate As Date

《GetData()》
Public Function GetDate()
MsgBox "開始日は、" & sDate & vbCrLf & "終了日は、" & eDate
GetDate = ">=#" & sDate & "# And <=#" & eDate & "#"
MsgBox ("Where文は、" & GetDate)
End Function

デバッグの為、"GetDate()"の戻り値を、メッセージボックスで表示してますが、戻り値は正常とおもわれますが、「抽出条件でデータ型が一致しません。」でクエリが実行できません。

ここを参考に、上記仕様にしました。
http://www.tsware.jp/tips/tips_369.htm

どうすれば、日付範囲をPablic変数から指定出来るか、お教え頂けましたら幸いです。
ちなみに、Pablic変数にしているのは、他のクエリでもこの日付範囲を使いたい為です。
もし、ほかに良い処理方法が有れば、ご教授ください。

A 回答 (2件)

GetDate = ">=#" & sDate & "# And <=#" & eDate & "#"



と文字列を & で結合してますので、GetDate の返り値は文字列になります。

おそらく日付型のフィールドの抽出条件にこの関数を設定していると思われますので、当然「抽出条件でデータ型が一致しません。」とのエラーになります。


>=#2013/1/1# And <=#2014/1/1#

というような式を返したいと期待しているのだと思いますが、
そもそも関数は値しか返すことはできません。

Public変数を使いたいのなら、

Public sDate As Date
Public eDate As Date

Public Function GetSDate() As Date
GetSDate = sDate
End Function

Public Function GetEDate() As Date
GetEDate = eDate
End Function

として、クエリの日付型フィールドの抽出条件の式を下記のようにします。


>= GetSDate And <= GetEDate
    • good
    • 0
この回答へのお礼

意味もちゃんと理解しないで、"&"で安易に結合していたのが原因でした。

お教え頂いた内容で、完璧に実現できました。
ありがとうございます。

お礼日時:2014/01/03 15:40

投稿時にMsgBoxのWhere文を書いて欲しいですね。



Date型なんだからFormat文で整形でしょうね。
Where条件に#で囲んだ日付を書く時、元が英語圏のソフトだけに
mm/dd/yyyy が良いらしい。
    • good
    • 0
この回答へのお礼

そうなんです、Format文も考えたんですが、参考に出来るサイトが見つからず、安易に"&"で結合して返そうしました。

ご意見ありがとうございました。

お礼日時:2014/01/03 15:42

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