• ベストアンサー

access97でのFunctionプロシージャの使い方

Access97で作業しています。 以下の記述で定義したレコードセットを同一の*.mdbのなかで共有したい(他のイベントプローシージャで呼びたい)のですが、どのようにするのでしょうか? これをFunctionプローシージャにする? Public にする? それと、このプロシージャで定義した変数名は他のイベントプロシージャでも使えるのでしょうか? プロシージャの性質も良く判らない状態です。宜しくお願い致します。 Dim strSQL As String Dim i, j, TOL, cnt As Integer Dim rsFLT, rsTBL As DAO.RecordSet Dim DB As Database Set DB = CurrentDb strSQL = "SELECT * FROM [Q-Order用] WHERE ID='" & [Forms]![F-Order用]![IDbox] & "'" Set rsFLT = DB.OpenRecordset(strSQL)

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

  • ベストアンサー
  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.3

Option Explicit Public strSQL As String Public i, j, TOL, cnt As Integer Public rsFLT, rsTBL As DAO.RecordSet Public DB As Database '------------------------------------------------ Public Sub qqq()  Set DB = CurrentDb strSQL = "SELECT * FROM [Q-Order用] WHERE ID='" & [Forms]![F-Order用]![IDbox] & "'" Set rsFLT = DB.OpenRecordset(strSQL) '------------------------------------------------ とすれば、いいですよ。変数の宣言をプロシージャの中ではなく、外で宣言してください。

ironman
質問者

お礼

・ありがとうございます。 できました。変数の設定に「Dim」ではなく「Public」を使うことをはじめて知りました。 非常に助かりました。

その他の回答 (2)

  • Khazad
  • ベストアンサー率30% (17/56)
回答No.2

>Public Sub qqq()  >Public strSQL As String >Public i, j, TOL, cnt As Integer  (以下略) sub~End SUBの中で宣言した変数はそのSUBの内部 でしか使えません。(プロシージャのローカル変数) * SUB内でpublic宣言をすると、そこでコンパイルエラーにならない? なので、 Public strSQL As String Public i, j, TOL, cnt As Integer Public rsFLT, rsTBL As DAO.RecordSet (中略) Public Sub qqq()  Set DB = CurrentDb みたいなかんじになります。 ただ、 >以下の記述で定義したレコードセットを同一の*.mdbのなかで共有したい これって、ACCESSでは結構めんどくさかった気がします。 VBAの書籍を買うなりして勉強しないと厳しいかも…。

ironman
質問者

お礼

ありがとうございます。 >VBAの書籍を買うなりして勉強しないと厳しいかも…。 そうですネ。VBAの本、いろいろ見てみます。

  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

はじめまして。 同一MDBの中で、共通もしくは相互に使いたい場合は、Publicで記述します。 Public Sub aaa()という風に宣言します。また変数も「Dim」ではなく[Public」で宣言します。 FunctionとSubの違いは戻り値を返すか返さないかです。 例えばPublic Function aaa()と宣言した場合、このモジュールの中でaaa=1とすると、呼び出し側は Ret=aaa()と記述することになり、Retに1が返却されます。Subは返却値はありません。 >Dim strSQL As String >Dim i, j, TOL, cnt As Integer >Dim rsFLT, rsTBL As DAO.RecordSet >Dim DB As Database を共通で使用したい変数にするのならば、 >Public strSQL As String >Public i, j, TOL, cnt As Integer >Public rsFLT, rsTBL As DAO.RecordSet >Public DB As Database と、どっかのソースの先頭で宣言していれば、おのおのモジュールで宣言する必要はありませんし変数の内容もそれぞれのモジュールで参照できるようになります。グローバル変数といいます。 >このプロシージャで定義した変数名は他のイベントプロシージャでも使えるのでしょうか? つかえます。 おのおののモジュールで宣言する変数のことをローカル変数といいます。

ironman
質問者

補足

早速のご回答ありがとうございました。 Dimの宣言をPublicで宣言しました。 その後、あるフォームのボタンクリックのイベントで 下記のレコードセット「rsFLT」とSQL「strSQL」を使いたいので ------------------------------------------------- Public Sub qqq()  Public strSQL As String Public i, j, TOL, cnt As Integer Public rsFLT, rsTBL As DAO.RecordSet Public DB As Database Set DB = CurrentDb strSQL = "SELECT * FROM [Q-Order用] WHERE ID='" & [Forms]![F-Order用]![IDbox] & "'" Set rsFLT = DB.OpenRecordset(strSQL) -------------------------------------------------- ボタンクリックのイベントに Call qqq() Me.Recordsource = strSQL と記述したところ、コンパイルエラー「変数が定義されていません」となってしまいます。 多分、Public Sub qqq() で定義した「strSQL」が認識できないためだと思うのですが、呼び出し方などが悪いのでしょうか? 初歩的な質問でスミマセン。教えていただけるとたすかるのですが・・。よろしくお願いします。

関連するQ&A