• ベストアンサー

ACCESSのVBAでのサブルーチンへの引数と戻り値について

教えてください。 AccessのVBAで、標準モジュールに作ったサブルーチンに1つの引数を渡して、複数の戻り値(例えば「果物」を渡して、「りんご」「みかん」「いちご」をそれぞれ受け取る)を取得したいのですが、どのようにしたらよいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#22222
noname#22222
回答No.3

s_husky です。 複数のフォームから一つの検索フォームを開く。 検索結果を、それぞれのフォームの任意のテキストボックスに表示する。 この場合、一番簡単なのは、 DoCmd.OpenForm stDocName, , , stLinkCriteria, , , "フォーム名,テキストボックス名" と OpenArg sを利用することです。 検索フォームでは、 Dim strOpenArgs() Sub Form Load()   strOpenArgs()=Split(OpenArg s,",") End Sub これで strOpenArgs(0)="フォーム名" strOpenArgs(1)="テキストボックス名" となります。 後は、 Forms(strOpenArgs(0)).Controls(strOpenArgs(1))="XXXX" とすれば、呼び出し元のテキストボックスに代入することができます。 ※私も、たった一人で独習している単なるスーツのデザイナーに過ぎません。 ※頑張って下さい。

guratan2005
質問者

お礼

こんなにも早くご回答がいただけるとは思いませんでした。本当に感謝しています。 いろいろ本などを調べながら独学していますが、なかなか思った内容を見つけることができず、困っていました。 丁寧な解説でとっても分かりやすく、これで問題も解決しました。 本当に有り難うございました。

その他の回答 (2)

noname#22222
noname#22222
回答No.2

以下のは、グループ名に対するメンバーを返す関数の例です。 配列変数を ByRef で渡しています。 関数自体は、メンバー数を戻しています。 Option Compare Database Option Explicit Private Sub コマンド0_Click()   Dim I      As Integer   Dim N      As Integer   Dim strMember() As String       N = 該当するメンバーを戻す("果物", strMember())   For I = 0 To N     Debug.Print strMember(I)   Next I End Sub Public Function 該当するメンバーを戻す(ByVal GroupName As String, ByRef strMember() As String) As Integer   Select Case GroupName     Case "果物"       strMember() = Split("りんご,みかん,イチゴ", ",")     Case "車"       strMember() = Split("乗用車,パトカー,消防自動車,救急車", ",")     Case "玩具"       strMember() = Split("ぬいぐるみ,犬,旦那", ",")     Case Else       strMember() = Split("", ",")   End Select   該当するメンバーを戻す = UBound(strMember()) End Function

guratan2005
質問者

お礼

ご回答ありがとうございました。とっても参考になりました。問題も解決しそうです。 ところで、今回の質問と直接関係ないのですが、私はACCESSでVBAを初めて間がないので、変な質問かもしれません。周りに聞く人もいないので済みません。 例えば、フォームA、B、Cなど複数のフォームで商品名を入力しようとしたとき、その商品を検索するためにフォームZの検索画面で条件をいれて検索させ、その結果の商品名や商品コードなどを元のフォームのテキストボックスなどに表示させるときは、一般的にどういうやりかたをするのでしょうか? 今回の質問のように、引数と戻り値でするのか、または別の簡単なやり方があるのか…。 また、お時間のあるときにでも教えてください。 よろしくお願いします。

noname#60992
noname#60992
回答No.1

テーブル構造をそのようにすればよいのですが、 例えば八百屋さんで売っているものをテーブルにする際、 フィールドとして ・ID ・種別 ・品名 などを用意すれば 1   果物   りんご 2   果物   みかん 3   果物   いちご 4   野菜   とまと 5   野菜   きゅうり ・・・・・・・・ 種別のコードを渡して、クエリの形でこのテーブルを検索すれば、果物のリストをレコードセットとして得ることができます。 

guratan2005
質問者

お礼

ご回答ありがとうございました。参考になりました。

関連するQ&A

  • VBAでの戻り値と引数について

    最近VBAでプログラムを勉強しています。 引数と戻り値について教えてください。 定義としては、 引数:プロシージャに渡される定数、変数、および式。 戻り値:呼び出し元に処理の結果を戻す値。 となっているのですがいまいちピンときません。 SubプロシージャとFunctionプロシージャでその違いがあると思うのですが、具体的にどれが引数でどれが戻り値なのかわかりません。 他のプログラミングも全く経験がない初心者で初歩的な質問ですみませんがご教授お願いします。

  • サブルーチンの戻り値

    すみません、教えてください。 サブルーチンの戻り値に、複数の配列を指定したいと思っています。 return(@data1,@data2,@data3,@data4); これら配列を戻り値として渡す時、4つの配列として渡す場合 サブルーチンを呼ぶ時はどのように記述すればよいでしょうか? それぞれ、配列のデータ量が違ったりしています。 やはり一度、一つの配列としてそれを区分していくやり方しかないですかね? よろしくお願いします。

    • ベストアンサー
    • Perl
  • サブルーチンに引数を2つ以上渡したい

    Access2002、vba上で サブルーチンに引数を2つ指定したいのですが、 なぜか「コンパイルエラー 修正候補=」 と出てしまいます。 引数を1つにするとうまく動作します。 どなたかお分かりの方いらっしゃいましたら教えて ください。 宜しくお願いします。 サンプルコード: -------------------------------- the_subroutine(a, b) ' ※ここでコンパイルエラー Sub the_subroutine(c As String, d As Object) End Sub -------------------------------

  • Excel VBA サブルーチン関連

    複数のマクロが標準モジュールに書かれているとします。(例:Module1~Module10) このモジュールを順番に実行するマクロを作成したいのですが、モジュールの名前を指定してサブルーチンコールは出来ないようです。 全部のモジュールを数珠つなぎにして1つのモジュールにまとめる方法は気が進みません。 モジュールの名前を指定してサブルーチンコールするようなスマートな方法はないでしょうか?

  • access vba 引数

    ACCESS VBA 引数取得について テキストボックスが横に3つ並んでいてその3つは同じデータのレコードで、 例えば | No | Name  |    Tel    |   ボタン  | |~~1~~|~~~山~~~~|~~99-9999-9999~~| |__更新__| | |~~2~~|~~~川~~~~|~~88-8888-8888~~| |__更新__| | |~~3~~|~~~空~~~~|~~77-7777-7777~~| |__更新__| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ となっていて、ボタンを押して別のフォームを開いてデータの更新をしたいのですが、その押したレコードのNoを引数にして別のフォームを開きたいのです。どのようにコードを書いていいのか分かりません。 今のところ引数はほかにもあるのでそれは取れていて 変数名 = (引数にしたい項目1) 変数名 = 変数名 & (引数にしたい項目2) 変数名 = 変数名 & (引数にしたい項目3) DoCmd.OpenForm "フォーム名", , , , , acDialog, 変数名  (↑openArgs) までは書けています。 押したレコードのNoを引数に加えるというところがどのようにすればいいか分かりません。 教えてください。 よろしくお願いします。m(_ _)m

  • Perlです。サブルーチンについて

    以下の文はあっていますでしょうか。 # サブルーチンを呼び出して引数は 3 とする。 # そして返ってきた戻り値を変数$aに代入せよ。 $a=&a(3); # サブルーチン名aせよ。 sub a{ # $_[0]が引数 3 となりプラス1して変数$bに代入せよ。 $b=$_[0]+1; # 変数$bの内容を戻り値として返せ。 return $b; } # 変数$aの内容を表示せよ。 print "$a";

    • ベストアンサー
    • Perl
  • リファレンスをサブルーチンの戻り値にしてもOKですか?

    ■ サブルーチン内部で処理した結果を格納した、配列、ハッシュ、スカラーなどのデータを戻り値として利用する必要があります。その場合、どうするのが標準的なやり方でしょうか? ■ return (配列へのリファレンス, ハッシュへのリファレンス, スカラー); などとやってしまっても問題はないでしょうか? ■ 下のプログラムを試したところ、予想に反しちゃんと 「31415」と表示されました。 #!/usr/bin/perl -w sub subroutine{ my @a = (3, 1, 4, 1, 5); return \@a; } my $b = subroutine{}; print @$b; ■ サブルーチン内部で使用した変数へのリファレンスをサブルーチン 外で使っていいのだろうか? サブルーチンの処理が終了した時点でサブルーチン内部で使用した 変数はメモリーから消去されるのかと思ったものですから。

    • ベストアンサー
    • Perl
  • オートフィルタのVBAについて

    初めまして、オートフィルタに係るVBAについて質問させてください! A列にりんごやぶどうなど果物の名前が入っているデータがあり、K列までデータが 入っています。(B列以降は果物の個数や値段のデータなので、果物の名前はA列のみです。)うち、「りんご」、「みかん」、「もも」、「いちご」のデータのみを抽出したいため、以下のようなVBAを記述しました。 しかし、実行したところエラーコード1004「RangeクラスのAutofillメソッドが失敗しました。」というメッセージが出てきたため、処理ができませんでした。 何か範囲の指定方法が間違っているのでしょうか…? ご教示いただけるととても嬉しいです。 よろしくお願いいたします。 Rows("1:1").AutoFilter ActiveSheet.Range("A1:K" & Cells(1).CurrentRegion.Rows.Count).AutoFilter Field:=1, Criteria1:= _ Array("りんご", "みかん", "もも", "いちご"), Operator:=xlFilterValue

  • Fortranのサブルーチン引数について

    他人が作ったFortran(恐らくFortran77)のプログラムで計算をしようとしています。 コンパイルはできるのですが,実行するとエラーが出てしまい困っています。 エラーメッセージは 「forrtl:severe(157):Program Exception - access violation」 となっていて,実行時エラー番号で調べると 「プログラムが適切な参照権を持っていない仮想アドレスに書き込み,または読み取り を行おうとした」と出ていました。 Fortran初心者の自分にはイマイチ意味が判らないのですが,エラーが出た後に サブルーチンのある決まった場所に黄色い矢印が示されます。 そこで今,その部分のサブルーチンを確認しているところです。 前置きが長くなってしまいましたが サブルーチンの中を確認している途中で疑問に思った所が一つあります。 問題のサブルーチンは --------------------------------------- call dbesl(EN,0,BX0,BY0,BI0,BK0)     subroutine dbesl(X,NOR,BX,BY,BI,BK) FN = NOR  ・  ・  ・ 11 NOR = FN               <---この行に黄色い矢印が出る return end --------------------------------------- となっているのですが,サブルーチンを呼び出すcall文の所で 2つ目の引数が『0』となっているのは正しい使い方なのでしょうか? どうもサブルーチン内の計算をしてメインプログラムに引数を返す所が おかしいような気がしています。 因みにメインプログラムに戻る際の"FN"の値は『0』となっていました。 コンパイラはCompaq Visual Fortranを使用しています。 足りない情報は出来るだけ追記していきますので,ご教示宜しくお願いします。

  • AS3の戻り値

    AS3の戻り値の使い方が理解できないので教えて下さい。 戻り値が引数の結果を戻すというのはこのサイトで分かりました。 理解できないのは以下です。 1.voidとreturnの違い。 2.戻った値の使い所。 特に2番ですがこのサイトの説明では戻り値の色々な答えの例で、引数「牛乳」が戻り値「イチゴ」に変わるという感じの例が結構ありますがそれでどうなるのか、どうなるのかが知りたいです。

    • ベストアンサー
    • Flash