テキストボックス3つで、
##.#入力しかできなくするコード例。
Option Explicit
Private Sub TB_BeforeUpdate(ByRef Cancel As MSForms.ReturnBoolean)
If Not Me.ActiveControl.Text Like "##.#" Then
MsgBox "数値(##.#)を入力してください。"
Cancel = True
End If
End Sub
Public Sub TB_KeyDown(ByRef KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyV And Shift = 2 Then 'Ctrl + V(貼り付け) は入力不可
KeyCode = 0
Exit Sub
End If
If Me.ActiveControl.SelStart >= 4 Then '4桁以上は入力不可
Select Case KeyCode
Case vbKeyBack, vbKeyTab, vbKeyReturn, vbKeyLeft
Case Else
'上記以外は入力不可
KeyCode = 0
End Select
ElseIf Me.ActiveControl.SelStart = 2 Then '3桁目は小数点のみ入力可
Select Case KeyCode
Case vbKeyBack, vbKeyLeft, vbKeyRight, _
vbKeyDecimal, 190 '小数点(Dot)
Case Else
'上記以外は入力不可
KeyCode = 0
End Select
Else
Select Case KeyCode '上記以外は、数字と移動キーの入力可
Case vbKeyBack, vbKeyLeft, vbKeyRight, _
vbKey0 To vbKey9, vbKeyNumpad0 To vbKeyNumpad9
Case Else
'上記以外は入力不可
KeyCode = 0
End Select
End If
End Sub
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Call TB_BeforeUpdate(Cancel)
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Call TB_KeyDown(KeyCode, Shift)
End Sub
Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Call TB_BeforeUpdate(Cancel)
End Sub
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Call TB_KeyDown(KeyCode, Shift)
End Sub
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Call TB_KeyDown(KeyCode, Shift)
End Sub
Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Call TB_KeyDown(KeyCode, Shift)
End Sub
Private Sub UserForm_Initialize()
Dim i As Long
For i = 1 To 3
Me.Controls("TextBox" & i).IMEMode = fmIMEModeDisable 'IME使用不可
Next
End Sub
54個の場合は、TextBox#_BeforeUpdate と TextBox#_KeyDown を54個記述する必要あり。
クラスモジュールにすると、これが必要なくなるのでシンプルになります。要望があればコード提示します。