|
>ユーザーフォーム上にあるTextboxに文字等を入力させる場合、
>その文字が大文字全角や小文字半角とかいろいろあると、検索等で
>問題が生じるため、入力文字はすべて半角大文字に設定しています。
>下記はテキストボックスに入力した際に文字をそれに変換します。
>
>Private Sub TextBox1_Change()
> TextBox1.Value = Trim(StrConv(TextBox1.Value, vbNarrow + vbUpperCase))
>End Sub
>
>テキストボックスが5ヶ程度ならいいのですが、今回は70個程度の
>テキストボックスがあります。上記のプログラムをTextbox1からTextbox70まで
>書くのは最後の手段と考えています。
> もっと簡単にまとめる方法を教えて頂きたいと思います。
こんな事すれば初期目的は、達せらてますが?
Changeイベントだけしか選べないのが疑問です?
UserFormnoコードモジュールに記述
Option Explicit
'Groupの値取得クラスの配列
Private clsGroup() As Class1
Private Sub UserForm_Initialize()
Dim i As Long
Dim j As Long
'ClassにTextBoxを設定
For i = 0 To Controls.Count - 1
If TypeName(Controls(i)) = "TextBox" Then
j = j + 1
ReDim Preserve clsGroup(1 To j)
Set clsGroup(j) = New Class1
clsGroup(j).Box = Controls(i)
End If
Next i
End Sub
Private Sub UserForm_Terminate()
Dim i As Long
'Classを破棄
For i = 1 To UBound(clsGroup)
Set clsGroup(i) = Nothing
Next i
End Sub
Classモジュールを追加して記述
Option Explicit
Private WithEvents txtBox As MSForms.TextBox
Public Property Let Box(ByVal txtNewValue As MSForms.TextBox)
Set txtBox = txtNewValue
End Property
Private Sub Class_Terminate()
Set txtBox = Nothing
End Sub
Private Sub txtBox_Change()
With txtBox
If .Value <> "" Then
.Value = Trim(StrConv(.Value, vbNarrow + vbUpperCase))
End If
End With
End Sub
尚、Classの名前は、ディフォルトのClass1のままにして有ります
|
|