とっておきの「夜食」教えて下さい

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

現在

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

TextBox50.Value = ""

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

A 回答 (3件)

こんにちは。



単に、以下のような単独のプロシージャーか、サブルーチン化させるなら、同じ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が複数あるなら、標準モジュールを使うべきかもしれませんが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/15 18:41

失礼・・・。

わざわざオブジェクトに入れる必要ありません^^;(しかも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

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

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



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

以下は例です。

【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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/11/15 18:36

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報