アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA初心者です.
Formを使ってExcelVBAで,次のようなプロシージャを書いています.
このプロシージャはすべてUserFormのフォルダーに保管されています.

Option Explicit
Dim n As Long

Private Sub Button_Click()
<A>           <A>では,nの値を使ったループの処理が含まれている
End Sub

Private Sub UserForm_Initialize()
<B>           <B>ではいろいろな初期化を行っている
n=1
End Sub

上のプロシージャを実行させると次のようになっていることが確認できました.
1)最初にUserForm_Initialize()が稼働し,nの値が1となっている.
2)Initialize稼働後,Formの画面が自動的に立ち上がり,Buttonが表示された.
3)Buttonをクリックすると実行時エラーメッセージが出た.その原因を調べてみたところ
  nの中には,Initializeで設定した1の値が入っているはずのところが,""が入っているため
  であることがわかった.

nは全プロシージャの共通域で定義しているはずですから,Button_Click()でも設定
した値が変わらないはずだと思うのですが,上記のようにクリアされています.
クリアされないようにするにはどうすればよいでしょうか.

A 回答 (2件)

どうすればいいか・・・。


という質問に対しては、コードも詳しく書かれていないので、きちんとデバッグして下さいとしか回答できません。

添付図は、起動後にボタン押下し、 n = n + 1 の行までデバッグを進めた状態です。
イミディエイトウインドウを見てわかるように、グローバル変数として宣言した n を、起動の初期処理で n = 1を代入、ボタン押下直後では、きちんとnの値は引き継がれています。


ご自身のコードにブレークポイントを設定し、nの値を逐次観察して下さい。
どこかでミスが有るはずです
「ExcelVBAの初期値設定不調」の回答画像1
    • good
    • 0
この回答へのお礼

早速のご回答有り難うございます.
ご指摘のミニサンプルを基に作り直して見たら,前とコードは全く同じなのですがうまくいきました.
原因は後で調べてみようと思います.

お礼日時:2016/05/07 22:58

Longで定義しているにもかかわらず、””ですか?


ということは、Sub Button_Clickプロシジャ内で、Dim n As Variantとか書いていませんか?
プロシジャ内で同名の変数を定義した場合、別の変数とみなされます。
    • good
    • 0
この回答へのお礼

早速のご回答有り難うございました.
同じ変数名で,同時に他のデータ型定義したものはありません.
確かにlongで""を使うのは問題ですが,これで一応動作はしました.
0に変えて憂いをなくしたいと思います.

お礼日時:2016/05/07 23:01

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