てぃーだブログ › S・M・C (Simple.Macro.Create) ~エクセルマクロ日記~ › VBA › エクセルマクロ(VBA):パブリック変数の宣言について

2009年08月05日

エクセルマクロ(VBA):パブリック変数の宣言について

台風が近づいていますね。

職場の鉢植えの木を片付けようか迷ってましたが、
備えあれば憂いなしで夕方一気に片付けてしまい
ました。
家の対策はどうしよう。心配です。

今日は、変数の「Public宣言」について書いてみたいと思います。

シートが2枚あり、
1枚目に「請求一覧」
2枚目に「入力画面」があります。
エクセルマクロ(VBA):パブリック変数の宣言について
「請求一覧」から対象者のセルをダブルクリックすると
「入力画面」へ移り、
入金額を入力後「一覧表へ」のボタンを押すと
「請求一覧」の対象者セルへ入金額を編集し
「請求一覧」の画面に戻る動きのプログラムをつくります。

「請求一覧」と「入力画面」で、どの対象者の処理
なのかを受け渡す必要があります。
つまり何行目のデータが選択されたかを取得して
モジュール間で参照できる事が必要になります。

そこで、思いつくのがモジュール間で参照可能な
Public変数です。

でも、その「Public変数」
指定する場所を間違えると値が消えてしまいます。
注意して下さい。

これは、私の失敗談です。

次のプログラムですが、ワークシートモジュールで「行」という
変数を宣言しました。

-------- ワークシートモジュール 請求一覧  ---- 

Public 行  'パブリック変数

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

行 = ActiveCell.Row  '選択されたセルの行番号を取得

Sheets("入力画面").Range("c5:e5").Value = ""
Sheets("入力画面").Range("b5").Value = Sheets("請求一覧").Range("b" & 行)
Sheets("入力画面").Range("c5").Value = Sheets("請求一覧").Range("c" & 行)

Sheets("入力画面").Select

End Sub


--------  ワークシートモジュール 入力画面  ---- 

Private Sub CommandButton2_Click() ’請求一覧のボタンを押す動く

Sheets("請求一覧").Range("d" & 行).Value = Sheets("入力画面").Range("d5").Value
Sheets("請求一覧").Select

End Sub


実行してみます。

金城ハジメさんのデータをダブルクリックします。

「入力画面」が表示されます。

入金額を入力し「一覧表へ」のボタンを押します。
エクセルマクロ(VBA):パブリック変数の宣言について
するとエラーがでました。
エクセルマクロ(VBA):パブリック変数の宣言について
デバッグをみてみます。
エクセルマクロ(VBA):パブリック変数の宣言について

Public変数「行」に何も入っていないと認識しているようです。

publicで宣言し、「請求一覧」のモジュールで
選択された行番号を編集して「入力画面」へ移動している
はずなのに「入力画面」では空になっている。

何故だろう?

最近、参考書を読んでいてわかったのですが、

public変数は標準モジュールで宣言する

と書かれていました。

早速、試してみました。

-------- 標準モジュール1  ---- 

Public 行  'パブリック変数


-------- ワークシートモジュール 請求一覧  ---- 

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

行 = ActiveCell.Row  '選択されたセルの行番号を取得

Sheets("入力画面").Range("c5:e5").Value = ""
Sheets("入力画面").Range("b5").Value = Sheets("請求一覧").Range("b" & 行)
Sheets("入力画面").Range("c5").Value = Sheets("請求一覧").Range("c" & 行)

Sheets("入力画面").Select

End Sub


--------  ワークシートモジュール 入力画面  ---- 

Private Sub CommandButton2_Click() ’請求一覧のボタンを押す動く

Sheets("請求一覧").Range("d" & 行).Value = Sheets("入力画面").Range("d5").Value
Sheets("請求一覧").Select

End Sub
エクセルマクロ(VBA):パブリック変数の宣言について

正常に動きました。


さて問題です。
私は、今まで
同じような処理のプログラムを何個か作ってきましたが
正常に動いています。
どのように作っていたのでしょうか。
(おはずかしいガ-ン

続きは、明日書きますね。


同じカテゴリー(VBA)の記事

Posted by ミール at 19:42│Comments(0)VBA
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。