2009年08月05日
エクセルマクロ(VBA):パブリック変数の宣言について
台風が近づいていますね。
職場の鉢植えの木を片付けようか迷ってましたが、
備えあれば憂いなしで夕方一気に片付けてしまい
ました。
家の対策はどうしよう。心配です。
今日は、変数の「Public宣言」について書いてみたいと思います。
シートが2枚あり、
1枚目に「請求一覧」
2枚目に「入力画面」があります。
「請求一覧」から対象者のセルをダブルクリックすると
「入力画面」へ移り、
入金額を入力後「一覧表へ」のボタンを押すと
「請求一覧」の対象者セルへ入金額を編集し
「請求一覧」の画面に戻る動きのプログラムをつくります。
「請求一覧」と「入力画面」で、どの対象者の処理
なのかを受け渡す必要があります。
つまり何行目のデータが選択されたかを取得して
モジュール間で参照できる事が必要になります。
そこで、思いつくのがモジュール間で参照可能な
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
実行してみます。
金城ハジメさんのデータをダブルクリックします。
「入力画面」が表示されます。
入金額を入力し「一覧表へ」のボタンを押します。
するとエラーがでました。
デバッグをみてみます。
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
正常に動きました。
さて問題です。
私は、今まで
同じような処理のプログラムを何個か作ってきましたが
正常に動いています。
どのように作っていたのでしょうか。
(おはずかしい)
続きは、明日書きますね。
職場の鉢植えの木を片付けようか迷ってましたが、
備えあれば憂いなしで夕方一気に片付けてしまい
ました。
家の対策はどうしよう。心配です。
今日は、変数の「Public宣言」について書いてみたいと思います。
シートが2枚あり、
1枚目に「請求一覧」
2枚目に「入力画面」があります。
「請求一覧」から対象者のセルをダブルクリックすると
「入力画面」へ移り、
入金額を入力後「一覧表へ」のボタンを押すと
「請求一覧」の対象者セルへ入金額を編集し
「請求一覧」の画面に戻る動きのプログラムをつくります。
「請求一覧」と「入力画面」で、どの対象者の処理
なのかを受け渡す必要があります。
つまり何行目のデータが選択されたかを取得して
モジュール間で参照できる事が必要になります。
そこで、思いつくのがモジュール間で参照可能な
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
実行してみます。
金城ハジメさんのデータをダブルクリックします。
「入力画面」が表示されます。
入金額を入力し「一覧表へ」のボタンを押します。
するとエラーがでました。
デバッグをみてみます。
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
正常に動きました。
さて問題です。
私は、今まで
同じような処理のプログラムを何個か作ってきましたが
正常に動いています。
どのように作っていたのでしょうか。
(おはずかしい)
続きは、明日書きますね。
Posted by ミール at 19:42│Comments(0)
│VBA