プロが教える店舗&オフィスのセキュリティ対策術

エクセル2000です。
標準モジュールで取得したパブリック変数は他のシートモジュールで参照できますが、逆にシートモジュールで取得したパブリック変数は他のシートで参照できないのでしょうか?
シートチェンジイベントで取得した文字列を変数nmに格納し、ワークブックモジュールで呼び出そうとしたら何もでてきませんでした。
どうやったらよいのでしょうか?

'シートモジュールの記述

Public nm As String

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rw As Integer
If Intersect(Target, Range("A1").CurrentRegion) Is Nothing Then Exit Sub
If Selection.Count > 1 Then Exit Sub
rw = Target.Row
nm = IIf(Cells(rw, "A") = "", Cells(rw, "A").End(xlUp).Value, Cells(rw, "A").Value)
'MsgBox nm
End Sub

'ThisWorkbookモジュールの記述

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If nm = "" Then Exit Sub
MsgBox nm & "さん、ご苦労様でした。"
End Sub

gooドクター

A 回答 (3件)

Public nm As String


をsheetで宣言してないかい。

標準モジュールで宣言すれば?

sheetやのbookはPrivate なんだから。
    • good
    • 2
この回答へのお礼

そうでしたか。
質問で書いたとおりシートモジュールで宣言をしていました。
標準モジュールで宣言するよう変えたらうまくいきました。

ありがとうございました。

お礼日時:2008/02/27 21:11

こんにちは。



オブジェクトモジュール(クラス、シート、ThisWorkbook、Userform 等)で
宣言された Public な変数にアクセスするには、親オブジェクトを装飾する
必要があります。例えば、シートモジュールなら

  Sheet1.StaffName

ですね。なお、シート名は可変のため、VBA で使うなら

  コードネーム.変数名

とすることが多いです。ブックモジュールの Public 変数も、コードネームが
ThisWorkbook のままなら、

  ThisWorkbook.SystemAuthor

などとします。これは VBA の言語仕様と考えて差し支えないと思います。
    • good
    • 0
この回答へのお礼

KenKen_SPさま、いつもありがとうございます。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Sheet1.nm = "" Then Exit Sub
MsgBox Sheet1.nm & "さん、ご苦労様でした。"
End Sub

でうまくいきました。勉強になりました。
ありがとうございます。

お礼日時:2008/02/27 21:20

If WorkSheets("Sheet1").mm = "" Then


のようにすれば参照できます。
    • good
    • 0
この回答へのお礼

そうですか、ありがとうございました。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Sheets("Sheet1")
If .nm = "" Then Exit Sub
MsgBox .nm & "さん、ご苦労様でした。"
End With
End Sub

で、うまくいきました。

お礼日時:2008/02/27 21:15

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング