電子書籍の厳選無料作品が豊富!

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)

A 回答 (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)
'------------------------------------------------
とすれば、いいですよ。変数の宣言をプロシージャの中ではなく、外で宣言してください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/05/27 21:48

>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の書籍を買うなりして勉強しないと厳しいかも…。
    • good
    • 0
この回答へのお礼

ありがとうございます。

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

お礼日時:2003/05/27 21:46

はじめまして。



同一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
と、どっかのソースの先頭で宣言していれば、おのおのモジュールで宣言する必要はありませんし変数の内容もそれぞれのモジュールで参照できるようになります。グローバル変数といいます。

>このプロシージャで定義した変数名は他のイベントプロシージャでも使えるのでしょうか?
つかえます。

おのおののモジュールで宣言する変数のことをローカル変数といいます。

この回答への補足

早速のご回答ありがとうございました。
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」が認識できないためだと思うのですが、呼び出し方などが悪いのでしょうか?
初歩的な質問でスミマセン。教えていただけるとたすかるのですが・・。よろしくお願いします。

補足日時:2003/05/27 11:20
    • good
    • 0

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