Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4193 / 13644 ツリー ←次へ | 前へ→

【57948】TextBoxの文字変換設定 亜矢 08/9/23(火) 6:51 質問[未読]
【57949】Re:TextBoxの文字変換設定 Hirofumi 08/9/23(火) 7:50 回答[未読]
【57957】Re:TextBoxの文字変換設定 亜矢 08/9/23(火) 16:52 お礼[未読]

【57948】TextBoxの文字変換設定
質問  亜矢  - 08/9/23(火) 6:51 -

引用なし
パスワード
   よろしくお願いします。
ユーザーフォーム上にあるTextboxに文字等を入力させる場合、
その文字が大文字全角や小文字半角とかいろいろあると、検索等で
問題が生じるため、入力文字はすべて半角大文字に設定しています。
下記はテキストボックスに入力した際に文字をそれに変換します。

Private Sub TextBox1_Change()
 TextBox1.Value = Trim(StrConv(TextBox1.Value, vbNarrow + vbUpperCase))
End Sub

テキストボックスが5ヶ程度ならいいのですが、今回は70個程度の
テキストボックスがあります。上記のプログラムをTextbox1からTextbox70まで
書くのは最後の手段と考えています。
 もっと簡単にまとめる方法を教えて頂きたいと思います。

【57949】Re:TextBoxの文字変換設定
回答  Hirofumi  - 08/9/23(火) 7:50 -

引用なし
パスワード
   >ユーザーフォーム上にある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のままにして有ります

【57957】Re:TextBoxの文字変換設定
お礼  亜矢  - 08/9/23(火) 16:52 -

引用なし
パスワード
   ▼Hirofumi さん:
>>ユーザーフォーム上にある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のままにして有ります
ご指導の通り書き込みました。うまくいきました。
ありがとうございました。
>Changeイベントだけしか選べないのが疑問です?
Exitイベントも使っていますが、まだうまく理解できないのでChangeを利用しています。

4193 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free