ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

エクセルマスターコミュのVBA テキストボックスのイベントの同一処理について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんにちは。
VBAについて質問です。

ユーザーフォームにテキストボックスを複数配置していおります。
金額を入力した際に3桁づつカンマ区切りが入るようにあるテキストボックスのイベントに以下のように入力しました。

-----------
Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim a,b as Integer
a = TextBox5.Value 'テキストボックスの値を取り出す
b = Format(a, "###,###") 'コンマ編集する
TextBox5.Value = b 'テキストボックスへ値をセットする
End Sub
-----------

このイベントをテキストボックス5,9,13,17,21,25と6,10,14,18,22,26の規則性のあるテキストボックスのイベントで使用したいのですが、調べてみると配列処理が使えるかもというところまでは分かったのですが、クラスモジュールとユーザーフォームのモジュールにどの様に記載すればいいのでしょうか?

コメント(16)

携帯からなので、あまり調べられていませんが、Googleなどで
例えば「Excel VBA イベント 複数」のようなキーワードで検索すれば
参考になるサイトが出てくるのではないかと思いますが
一応調べて実際にやってみました

通常、VBAのクラスモジュールではMsFormsコントロールのEnter/Exit/BeforeUpdate/AfterUpdateイベントを
扱う事ができないとのことだったのでKeyDownイベントでEnterキーが押されたときに
コンマ編集するようにはできましたよ
>>[2]
返信が遅くなってすいません。色々調べて頂いたみたいでありがとうございます。
KeyDownイベントで可能なんですね。
もう少し勉強してみます。
マリ男さん
http://blog.goo.ne.jp/pc_college/e/9ca2b0c452e9e691cad1dbd2783868cf
http://ateitexe.com/excelvba-control-change-event/
などで調べて、以下のように記述してみたところ、Class2モジュールで「引数が無効です」とエラーが返ってきたのですがどのように間違ってるのでしょう?

--------------------------------------
-------------以下Class2に記載----------
Private WithEvents KText As MSForms.TextBox
Private Index As Integer
Public Sub NewClass(ByVal t As MSForms.TextBox, ByVal i As Integer)
Set KText = t
Index = i
End Sub

Private Sub KText_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim Nt As Integer, Ht As Integer
If KeyCode = 13 Or KeyCode = 9 Then
Nt = UserForm3.Controls(t & i).Value
Ht = Format(Nt, "###,###")
UserForm3.Controls(t & i).Value = Ht
End If
End Sub
----------------------------------------
-------------以下UserForm3に記載--------
Private Ntext(5 To 50) As New Class2

Private Sub UserForm_Initialize()
Dim i As Integer, t As Integer
For i = 7 To 51 Step 4
Controls("TextBox" & i).ShowDropButtonWhen = fmShowDropButtonWhenAlways
Next i

For t = 5 To 49 Step 4
Ntext(t).NewClass Controls("Textbox" & t), t
Next t

End Sub
-----------------------------------------
ちなみにエラーはClassモジュールの
Nt = UserForm3.Controls(t & i).Value
のところで返ってきました。
>>[005]
>Nt = UserForm3.Controls(t & i).Value
ぱっと見ですが、t, iの値はどうなっていますか?
>>[6]
あ、、、、。ちゃんと見てみるとtもiも宣言できてないですね。
tは"Textbox"、iはTextBoxのIndexを代入したいのですが、それが書けてない?ですね。

今、このファイルが手元にないのでいじれないですが、多分こんな感じでしょうか?
-----------------------------------
Class2のみ修正
-----------------------------------
Private WithEvents KText As MSForms.TextBox
Private Index As Integer
Public Sub NewClass(ByVal t As MSForms.TextBox, ByVal i As Integer)
  Set KText = t
  Index = i
End Sub

Private Sub KText_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim Nt As Integer, Ht As Integer
If KeyCode = 13 Or KeyCode = 9 Then
  Nt = UserForm3.Controls(KText & Index).Value
  Ht = Format(Nt, "###,###")
  UserForm3.Controls(KText & Index).Value = Ht
End If
End Sub
---------------------------------------
>>[7]
>あ、、、、。ちゃんと見てみるとtもiも宣言できてないですね。
なぜ質問する前にちゃんと見ないのでしょうか???

また、修正後のコードでも恐らくエラーになるのではないかと思いますね
>>[8]
>なぜ質問する前にちゃんと見ないのでしょうか???
確認したつもりでした。
>修正後のコードでも恐らくエラーになるのではないかと思いますね
どこをどう直せばいいのでしょうか?
>>[9]
KTextには"TextBox"という文字列ではなく、入力されている値が入ってくるかと思います
>>[10]
なるほど、ということはこんな感じでしょうか?
--------------------------------------
Private WithEvents KText As MSForms.TextBox
Private Index As Integer
Public Sub NewClass(ByVal t As MSForms.TextBox, ByVal i As Integer)
  Set KText = t
  Index = i
End Sub

Private Sub KText_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim Nt As Integer, Ht As Integer
If KeyCode = 13 Or KeyCode = 9 Then
  Nt = UserForm3.Controls("TextBox" & Index).Value
  Ht = Format(Nt, "###,###")
  UserForm3.Controls("TextBox" & Index).Value = Ht
End If
End Sub
---------------------------------------
>>[12]
恐らくエラーにはならないかと思いますね
ただ、コンマ編集された文字列はTextBoxには入ってこないでしょうね
>>[13]
おかげさまで解決したしました。
NtとHtの変数の宣言が整数型でしたね。Stringに直して動作確認もできました。
>>[14]
解決されましたか

ただ、別にTextBoxに入力される値が整数型なのであれば
Ntまで文字列型にする必要はないように思いますがね

HtはNtの値がFormat関数で文字列型になり入ってきますから
文字列型である必要はありますが、Ntはそのまま整数型でも良かった気はします

ログインすると、残り3件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

エクセルマスター 更新情報

エクセルマスターのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。