プロが教えるわが家の防犯対策術!

VBAでプロシージャ間のデータを渡したい

main関数の中でget_Recordという関数を呼んでいます。この中でアクセスの
テーブルからデータを取得して、「this_Hensuu」という変数に格納します。
やりたいことは、get_Recordで取得した変数をmain関数の中で利用したいです。
main()関数外で変数を宣言してグローバル変数とすれば解決するのは
わかりますが、その他の方法でmain関数に値を渡すことは可能でしょうか?

Sub main()
Dim x = 10
Call get_Record(x)
...
...
end sub

Sub get_Record(Byref x As Integer)
Dim rs As Dao.recordset
Dim this_Hensuu As String
Dim this_Hensuu2 As String

get_SQL As String
get_SQL =""
get_SQL="Select * from TABLE1 where ID='" & x & "'"
rs = Openrecordset(get_SQL,opendynaset)
this_Hensuu = rs!名前
this_Hensuu = rs!名前2
end sub

A 回答 (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 と、参照渡しにしているのでしょうか?値渡しでも良いと思います。たいしたことではありませんが。
    • good
    • 0

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側は配列で受け取って使用する。
(例は全角スペースを使用しています。)
    • good
    • 0
この回答へのお礼

ありがとうございます!functionを使えばなんとかなるかなと思っていたのですが、返したい変数が2つあるので、返せないと思っていたのですが、配列を使えばいいんですね。勉強になります、ありがとうございました!

お礼日時:2010/01/03 08:59

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