- ベストアンサー
VBAでプロシージャ間のデータを渡す方法
- VBAでプロシージャ間のデータを渡す方法について説明します。
- main関数内でget_Record関数を呼び出し、データを取得し、変数に格納します。
- main関数内で利用するために、get_Recordで取得した変数を渡す方法について調べています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 Dim x = 10 という書き方は、VBAではないようですし、細かい部分では、他にもエラーが残っているかもしれませんね。別にグローバル変数にしなくても、モジュールにいろんなものを突っ込まなければ、モジュールレベル(Private)でも良いとは思います。関数プロシージャでも、Sub プロージャでも、変数は構造体でも、配列変数でも、そのまま扱っても、それ自体は、どちらでも良いと思います。スタイルとしては、Access の場合は、関数型にすることは多いと思いますが、ご自分で出来るスタイルにしておいて、不具合があれば、その後で換えればよいと思います。 Call get_Record(x) から、戻してくるなら、 Sub Main() Dim this_Hensuu As String Dim this_Hensuu2 As String Const x = 10 Call get_Record(x, this_Hensuu, this_Hensuu2) '... '... End Sub Sub get_Record(ByRef x As Integer, this_Hensuu As String, this_Hensuu2 As String) 'Dim this_Hensuu As String ''いらない 'Dim this_Hensuu2 As String ''いらない Dim get_SQL As String 'Dim を入れる get_SQL ="" '変数宣言するなら不要かも get_SQL="Select * from TABLE1 where ID='" & x & "' ;" rs = Openrecordset(get_SQL,opendynaset) this_Hensuu = rs!名前 this_Hensuu2 = rs!名前2 とすればよいのでは。なぜ、ByRef x As Integer と、参照渡しにしているのでしょうか?値渡しでも良いと思います。たいしたことではありませんが。
その他の回答 (1)
- edomin7777
- ベストアンサー率40% (711/1750)
Functionにして、値を返す。 これが、いちばん普通の使い方だと思います。 このとき、Hensuuが2つ有るようなので(HensuuとHensuu2)配列にして返しましょう。 Function get_Record(Byref x As Integer) Dim rs As Dao.recordset Dim this_Hensuu(0 To 1) As String get_SQL As String get_SQL ="" get_SQL="Select * from TABLE1 where ID='" & x & "'" rs = Openrecordset(get_SQL,opendynaset) this_Hensuu(0) = rs!名前 this_Hensuu(1) = rs!名前2 get_Record = this_Hensuu End Function で、main側は配列で受け取って使用する。 (例は全角スペースを使用しています。)
お礼
ありがとうございます!functionを使えばなんとかなるかなと思っていたのですが、返したい変数が2つあるので、返せないと思っていたのですが、配列を使えばいいんですね。勉強になります、ありがとうございました!