• ベストアンサー
  • 困ってます

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

  • 質問No.558246
  • 閲覧数282
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 78% (117/150)

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)

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

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

ベストアンサー率 22% (559/2488)

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

お礼率 78% (117/150)

・ありがとうございます。
できました。変数の設定に「Dim」ではなく「Public」を使うことをはじめて知りました。
非常に助かりました。
投稿日時:2003/05/27 21:48

その他の回答 (全2件)

  • 回答No.2

ベストアンサー率 30% (17/56)

>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

お礼率 78% (117/150)

ありがとうございます。

>VBAの書籍を買うなりして勉強しないと厳しいかも…。
そうですネ。VBAの本、いろいろ見てみます。
投稿日時:2003/05/27 21:46
  • 回答No.1

ベストアンサー率 22% (559/2488)

はじめまして。

同一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

お礼率 78% (117/150)

早速のご回答ありがとうございました。
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
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

ピックアップ

ページ先頭へ