こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2000VBA 複数のテキストボックスに連続して同一処理をしたい

Excel2000のVBAでユーザーフォームを使って簡単なインターフェースを作っています。
今まではほとんど IF~Then 文のみでどうにかなるよう処理をしてきましたが、今回はさすがにコードが長くなってしまうので何とかしたいと思い質問させていただきました。

現在

TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""

TextBox50.Value = ""

のような処理になっています。
こういった処理が複数回あり、コードが長くなってしまっています。
これを簡素化する方法はないでしょうか?

投稿日時 - 2005-11-15 15:07:00

QNo.1780554

困ってます

質問者が選んだベストアンサー

こんにちは。

単に、以下のような単独のプロシージャーか、サブルーチン化させるなら、同じUserformモジュールにしたらいかがですか?

Private Sub CommandButton1_Click()
For i = 1 To 50
 Me.Controls("TextBox" & CStr(i)).Value = ""
Next
End Sub

'--------------------------------
'または、

Private Sub CommandButton1_Click()
 Call s_TextBoxesClear
End Sub

Sub s_TextBoxesClear()
For i = 1 To 50
 Me.Controls("TextBox" & CStr(i)).Value = ""
Next
End Sub

もちろん、Userformが複数あるなら、標準モジュールを使うべきかもしれませんが。

投稿日時 - 2005-11-15 16:51:32

お礼

回答ありがとうございました。
今回はコードの記述を簡素化したかったので、上の方法で解決できました。
For~Nextを使うところまでは推察できていたのですが、CStrを知りませんでした。これで一つお利口になれましたw

投稿日時 - 2005-11-15 18:41:06

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

失礼・・・。わざわざオブジェクトに入れる必要ありません^^;(しかもObject型つかっちゃってるし・・・)

【UserForm1】
Private Sub UserForm_Click()
Call TextInitialize(Me)

End Sub

【Module1】
Public Sub TextInitialize(ByRef Frm As UserForm)
Const CtrlName As String = "TextBox"
Const CtrlStIdx As Long = 1
Const CtrlEdIdx As Long = 50
Dim i As Long

For i = CtrlStIdx To CtrlEdIdx
Frm.Controls(CtrlName & CStr(i)).Text = ""
Next

End Sub

他にもミスしてそう・・・(笑)

投稿日時 - 2005-11-15 15:42:44

ANo.1

> こういった処理が複数回あり、コードが長くなってしまっています。

複数回あるのであれば、この部分だけサブルーチン化してしまえば良いと思います。

以下は例です。

【UserForm1】
Private Sub UserForm_Click()
Call TextInitialize(Me)

End Sub

【Module1】
Public Sub TextInitialize(ByRef Frm As UserForm)
Const CtrlName As String = "TextBox"
Const CtrlStIdx As Long = 1
Const CtrlEdIdx As Long = 50
Dim Obj As Object
Dim i As Long

For i = CtrlStIdx To CtrlEdIdx
Set Obj = Frm.Controls(CtrlName & CStr(i))
Obj.Text = ""
Next

End Sub

投稿日時 - 2005-11-15 15:36:15

お礼

早速の回答ありがとうございました。
こんなに早く回答がくるとは思っていませんでした。
今回はとりあえず簡単そうな方法でやってみることにします。
行き当たりばったりで作っているので、苦労してますが、今後必要に応じてサブルーチン化も検討したいと思います。

投稿日時 - 2005-11-15 18:36:17

あなたにオススメの質問