電子書籍の厳選無料作品が豊富!

こんばんは!
プロシージャ間での変数の取り扱いについて読んでいてよく分からないので教えて頂きたいです。

現在、ユーザーフォームにて下記のコードを記述していますが、テキストボックス1に表示するiの値を初めは50として、正解ならiに1を加算、不正解ならi から1を減算して、テキストボックス1の内容を更新するようにしたいのですが、どのように記述すればよろしいでしょうか。

-----------------------------------------------
private sub userform_initialize()
Textbox1 = int(i)
end sub
-----------------------------------------------
private sub commandbutton1_click()

If 条件式 then
"正解"
else
"不正解"
end if

call userform_initialize()

end sub
-------------------------------------------------
commandbutton2 以降省略

「プロシージャをまたいて変数を扱いたい!」の質問画像

A 回答 (3件)

ソースをみてると、


private sub userform_initialize()
Textbox1 = int(i)
end sub
より、1回目にuserformを開けたとき50とし、
commandbutton1をclickしたときに
userform_initialize()を呼び出して、49か51かを表示したいと推測できます。
ということで、最初に50をセットできる場所がありません。
1回目にuserformを開けたとき50としようとすると
userform_initializeで
i=50
とする必要がありますが、
commandbutton1をclickしたときに
userform_initialize()を呼び出してiを49か51にしたはずなのに
50に置き換えられてしまいます。

public i as integer
-----------------------------------------------
private sub userform_initialize()
i = 50
call displayTextbox1()
end sub
-----------------------------------------------
private sub commandbutton1_click()

If 条件式 then
"正解"
i=i+1
else
"不正解"
i=i-1
end if

'call userform_initialize()
call displayTextbox1()

end sub
-------------------------------------------------
private sub displayTextbox1()
Textbox1 = int(i)
end sub

というふうに書かないといけません。
そもそも、
userform_initialize()
のような、イベントが発生したときに動作するサブルーチンを他から呼び出すのは
お薦めできません。
(いくつかの事情によりやむを得ず書く場合がないとはいえず、
 やってはいけないとまでは言いませんが。)
    • good
    • 0

これはVBAですよね?


普通にプロシージャの外で変数を定義すればいいのでは。

Option Explict

Private i as Integer ←これ
-----------------------------------------------
private sub userform_initialize()
i = 50
Textbox1.Value = i
end sub
-----------------------------------------------
private sub commandbutton1_click()

If 条件式 then
i = i + 1
else
i = i - 1
end if

Textbox1.Value = i

end sub
    • good
    • 0

こんにちは。



そういう場合は、メンバ変数を使えば楽でしょう・・・。
または、メソッドの引数に渡してやります。
    • good
    • 0

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