• 締切済み

Access クエリで変数を参照するとき

モジュールのPublic変数をクエリから参照するとき、 Public Function getdata() As Integer getdata = 1 End Function と記述しておけき、 クエリの抽出条件をgetdata()にしておくと クエリの抽出条件に 「1」 と書いたのと同じになりますが、 クエリの抽出条件の欄に「1 Or 2 Or 3」とした時と同じ状況を作りだしたい時、 モジュールの方には Public Function getdata() As Integer  getdata = 1 Or 2 Or 3 End Function 「・・・・Integer」ではマズイわけで、なんと記述したらよいか教えて下さい。

みんなの回答

  • piyo2000
  • ベストアンサー率49% (144/293)
回答No.1

>「・・・・Integer」ではマズイわけで 戻り値をStringにすればいいんじゃないでしょうか(^^; ただこの場合、クエリをSQLビューで見ていただくと分かると思うんですが ...where [テーブル名].フィールド名=getdata() となりますよね。 getdata="1 or 2 or 3"とすると、展開してみれば ...where [テーブル名].フィールド名=1 or 2 or 3 となります。 正しくは ...where [テーブル名].フィールド名=1 or [テーブル名].フィールド名=2 or [テーブル名].フィールド名=3 になるのはお分かりですよね? getdataの戻り値を"between 1 to 3"にすれば(フィールド定義が整数なら)解決しますが 例えば"1 or 4 or 7"とかしたい場合は、工夫が必要になります。 こんな感じで、フィールド名を引数として渡してやるといいかもしれません。 Public Function getdata(strField as string) As String  '「where フィールド名=」まではセットされる getdata = "1 Or " & strField & "=2 Or " & strField & "3" End Function ※ 抽出条件をgetdata("フィールド名")とするのを忘れずに

situmonnsya
質問者

お礼

ありがとうございました

situmonnsya
質問者

補足

ご丁寧にありがとうございます。 試してみましたがうまくいきませんでした。 ちなみに関数名の「Public」は不要かと(あるとうまくいかない、標準モジュールにおいてある) 「・・・・Integer」で「・・・・String」でも条件式一個だけは受け付けるのですが。 う~~ん 他の方法も考えてみます。

関連するQ&A

  • Access クエリのデータ型について

    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変数にしているのは、他のクエリでもこの日付範囲を使いたい為です。 もし、ほかに良い処理方法が有れば、ご教授ください。

  • ACCESSの抽出条件更新方法について

    アクセス素人です。 お世話になります。 質問番号:2664266で 複数のクエリーの条件を一括で変更する場合 モジュールで関数を作ることで下記のように解答されています。 >クエリーの条件に >=GetWhere() >とでもしておいて、 >モジュールのほうで、 >Public Function GetWhere() As String >Dim strWhere As String >strWhere = "#2007/1/1#" >GetWhere = strWhere >End Function 上記は日付についてでありますが クエリーの条件が数値型で、たとえば事業所コードを 複数選択したいときは"#2007/1/1#"の所は どのように記述すればいいのでしょうか。 クエリーに直に条件を入れるときのように strWhere = "1010" or "2010" or "3010" と記述してみましたがうまくいきません。 ご教授お願いします。

  • 関数の引数に複数のユーザ定義型変数を使いたい

    一つの関数の一つのパラメータが異なるユーザ定義型を受けられるようにしたいのですが、どのようにすればいいのでしょうか? Public Type TypeA strCodeA As String intNumA As Integer End Type Public Type TypeB strCodeB As String intNumB As Integer End Type Public Function funcTest(arg1 As Variant) As Integer (略) End Function と記述して関数を Dim datA As TypeA iResult = funcTest(datA) と呼び出そうとすると、次のようなエラーメッセージが表示されて進みません。 コンパイルエラー: パブリックオブジェクトモジュールで定義されたユーザー定義型に限り、変数に割り当てることができ、実行時バインディングの関数に渡すことができます。

  • accessクエリの条件パラメータの件

    こんにちわ。 access2000でクエリを作成していますが, [抽出条件]に「モジュール」内で定義したグローバル変数を 渡したいのですが,どのようにすれば良いでしょうか? 教えてください。お願いします。

  • ACCESSのフォームからレポートへの変数の引渡し

    フォームで定義した変数をレポートに渡して利用したいがうまく渡せません。 具体的にはクエリー名をレコードソースとして利用するために変数に入れて渡そうとしています。 [フォーム]での変数定義 Dim 抽出種別 as String -----(1) 抽出種別 = "Q抽出未回収" -----(2) [レポート]開く時のイベントプロシージャー Private Sub Report_Open(Cancel As Integer) Me.RecordSource = 抽出種別 -----(3) End Sub 実行結果は印刷の各フィールドの項目に #Name? と表示されてしまいます。 (3)で変数を使わずに"Q抽出未回収"とやるとうまくプレビューされます。 変数の定義の方法や場所などいまいち理解が出来ていないものと思います。 フォームからレポートへの変数の引渡しはどうやってやればうまく出来るのでしょうか?

  • カスタム関数の変数をリセットしたい

    AC2000/WIN2000です。 以下のようなカスタム関数を使って、クエリーで順位を振っているんですが、 変数JUNをリセットしていないので、処理を行う毎に数字が増えていってしまいます。カスタム関数の変数をリセットするにはどうすれば良いんですか? Global MAEBUKA, REN, JUN'(順位) As Integer Option Compare Database Function G_RENBAN(BUKA As Integer) As Integer If MAEBUKA = BUKA Then G_RENBAN = JUN Else G_RENBAN = JUN + 1 JUN = JUN + 1 End If MAEBUKA = BUKA End Function

  • Access クエリの条件の参照先

    お世話になります。 ローカルのクエリの抽出結果をExcelファイルに出力しようとしてます。 クエリの条件としてはフォーム上にあるテキストボックスの文字列を参照する ようにしてます。 ※当該クエリを開くと問題なく抽出されてます。 このクエリの抽出結果を出力しようとすると、「実行時エラー3061 パラメータ が少なすぎます。1を指定してください。」と表示されます。 なお、出力は以下のようにしてます。  Set MyRs = CurrentDb.OpenRecordset("クエリ名") ローカルクエリの条件をフォーム上のテキストボックスではなく、固定で 文字列を指定してやると、当該エラーは出なくなります。 なので、フォーム上のテキストボックスを参照できないのか、そもそも 上記のOpenRecordsetで何か(パラメタ)足りないのか。。よくわかりません。 勉強不足で大変恐縮ですが、ご教授の程、宜しくお願い致します。

  • VBでコンパイル エラー 変数が必要です

    すみません、教えてください イミージエイトウインドウから myttを実行すると 「変数が必要です」のエラーがでます 教えてください Public Type myType Pos As Integer xx As Integer yy As Integer find As Integer '-1あり 0なし End Type Function mytt() Dim myzz As myType myzz.Pos = 45 mySerch (myzz) '←ここでエラー End Function Function mySerch(ww As myType) As myType ww.find = -1 End Function

  • アクセス フィールド名に変数を付け加えて参照する

    OS:Win7Pro 使用ソフト:アクセス2010 ご質問させていただきます。 テーブルに以下のようなフィールドがあるとします。 [単価_1],[単価_2],[単価_3],[単価_4],[単価_5] これらのフィールドのアンダーバー以下を変数を使用して参照することは可能でしょうか? ([単価_○]の○の部分を変数を使用して参照したいです。) 自分なりに以下のコードを作成したらダメでした。。 Dim cnt As Integer cnt=1 with me !単価_(cnt) end with ご存知の方がいましたらご教授いただけるとありがたいです。

  • Accessのクエリとモジュールで…

    モジュールは以下のようになっています。 Public Function HanName(Han As String) If [Han] <> "" Then HanName = DLookup("[班名]", "[T_班]", "[班ID]=" & [Han]) Else HanName = "" End If End Function クエリの フィールド1に[班1]というフィールドがあり、 フィールド2に HanName([班1]) といれました。 班1が入力されているものについては、きちんと動作されるのですが、 班1が空欄の場合、#Errorとなってしまいます。 どのように直せばいいのでしょうか?

専門家に質問してみよう