Excel VBA質問箱 IV

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

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


24142 / 76738 ←次へ | 前へ→

【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のままにして有ります
0 hits

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

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