このWebの記事
https://blog.goo.ne.jp/pc_college/e/9ca2b0c452e9e691cad1dbd2783868cf
を見ながら、Excel VBAで電卓の作成を試みました。
使用しているのはOffice365です。
記事にありますように、「frmCalc」というユーザーフォームには、
--------------------------
Option Explicit
Private NumBtn(0 To 9) As New Class1
Private Sub frmCalc_Initialize()
'インスタンスの生成
Dim i As Integer
For i = 0 To 9
NumBtn(i).NewClass Controls("b" & i), i
Next
End Sub
Private Sub b0_Click()
End Sub
--------------------------
を記載しまして。(「UserForm_Initialize()」→「frmCalc_Initialize()」箇所のみ変更)
クラスモジュール「Class1」の方には、
--------------------------
Option Explicit
'イベントを持つコマンドボタン型の変数を宣言
Private WithEvents Btn As MSForms.CommandButton
'ボタンの数字を格納する変数を宣言
Private Index As Integer
Public Sub NewClass(ByVal c As MSForms.CommandButton, _
ByVal i As Integer)
'いわゆるコンストラクタ処理
'引数のコマンドボタンを変数に格納
Set Btn = c
'コマンドボタンの数字を変数に格納
Index = i
End Sub
--------------------------
を記載しました。
電卓のフォームを開き、F5キーを押してフォームを表示させると。
1のボタンを押すと1が、2のボタンを押すと2が…と、表示されるはずなのですが。
自分の場合、どのボタンを押しても、何の数字も入力されないのです。
http://f.hatena.ne.jp/moon-fondu/20190905152415
記事通りにしたはずなのですが…0~9のボタンのオブジェクト名も、上記コードに「For i = 0 To 9
NumBtn(i).NewClass Controls("b" & i), i」とありますので、b0、b1、b2…と、間違いなくしているはずなのですが。http://f.hatena.ne.jp/moon-fondu/20190905152418
考え得る原因と対策がありましたら、お教えいただけますと助かります。
よろしくお願い致します。
>。(「UserForm_Initialize()」→「frmCalc_Initialize()」箇所のみ変更)
↑この、関数名を変えたのが原因では?
UserForm_Initialize は、フォームが作られた時に走るコードなので、
名前を変えない。※変えてはイケナイのでは?
>記事通りにしたはずなのですが…0~9のボタンのオブジェクト名も、上記コードに「For i = 0 To 9
NumBtn(i).NewClass Controls("b" & i), i」とありますので、b0、b1、b2…と、間違いなくしているはずなのですが。http://f.hatena.ne.jp/moon-fondu/20190905152418
UserForm_Initialize ← これが、UserFormを開いた時に走るコードなので、
frmCalc_Initialize
↑と、フォームの名前にしなくても良いのでは?
google:UserForm_Initialize←を検索してみては?
確認方法ですが、コードを見るだけではわからないので、
なれるまでは
MsgBox "frmCalc_Initialize インスタンスの生成"
みたいに、メッセージボックスで確実にここにきているか、確認すると良いのでは。
Private Sub frmCalc_Initialize() 'インスタンスの生成 MsgBox "frmCalc_Initialize インスタンスの生成" Dim i As Integer For i = 0 To 9 NumBtn(i).NewClass Controls("b" & i), i Next End Sub
↑メッセージが、表示されないなら、このコードは走っていない
で、名前を元に戻して
Private Sub UserForm_Initialize() 'インスタンスの生成 MsgBox "UserForm_Initialize インスタンスの生成" Dim i As Integer For i = 0 To 9 NumBtn(i).NewClass Controls("b" & i), i Next End Sub
にすると、メッセージが表示されるか?確認はてみては
原因は、UserForm_Initializeをフォーム名_Initializeにしたために初期化コードが走っていないと予想してみました
解決のヒントとなれば幸いです。
google:UserForm_Initializeを検索
>。(「UserForm_Initialize()」→「frmCalc_Initialize()」箇所のみ変更)
↑この、関数名を変えたのが原因では?
UserForm_Initialize は、フォームが作られた時に走るコードなので、
名前を変えない。※変えてはイケナイのでは?
>記事通りにしたはずなのですが…0~9のボタンのオブジェクト名も、上記コードに「For i = 0 To 9
NumBtn(i).NewClass Controls("b" & i), i」とありますので、b0、b1、b2…と、間違いなくしているはずなのですが。http://f.hatena.ne.jp/moon-fondu/20190905152418
UserForm_Initialize ← これが、UserFormを開いた時に走るコードなので、
frmCalc_Initialize
↑と、フォームの名前にしなくても良いのでは?
google:UserForm_Initialize←を検索してみては?
確認方法ですが、コードを見るだけではわからないので、
なれるまでは
MsgBox "frmCalc_Initialize インスタンスの生成"
みたいに、メッセージボックスで確実にここにきているか、確認すると良いのでは。
Private Sub frmCalc_Initialize() 'インスタンスの生成 MsgBox "frmCalc_Initialize インスタンスの生成" Dim i As Integer For i = 0 To 9 NumBtn(i).NewClass Controls("b" & i), i Next End Sub
↑メッセージが、表示されないなら、このコードは走っていない
で、名前を元に戻して
Private Sub UserForm_Initialize() 'インスタンスの生成 MsgBox "UserForm_Initialize インスタンスの生成" Dim i As Integer For i = 0 To 9 NumBtn(i).NewClass Controls("b" & i), i Next End Sub
にすると、メッセージが表示されるか?確認はてみては
原因は、UserForm_Initializeをフォーム名_Initializeにしたために初期化コードが走っていないと予想してみました
解決のヒントとなれば幸いです。
google:UserForm_Initializeを検索
質問を閉じられていないというのは、未だ全ての問題が解決してはいないということですか?
いえ、失念しておりました。大変失礼しました。
質問を閉じられていないというのは、未だ全ての問題が解決してはいないということですか?
2019/09/23 18:10:30いえ、失念しておりました。大変失礼しました。
2019/09/28 15:52:28