たぶん少し長いですね。私は通常、クラスモジュールとコントロールのタグプロパティを使って、テキストボックスに何が入力できるかを決定します。
4つのテキストボックスを含むフォームを作成します。
テキストボックスを与えるこれらのタグ:
- 1; CDBL
- 2; CINT
- 3; CSTR
- 4; CSENTENCE
番号が貼り付けするカラムでありますフォームが保存されるときの値(私はここでそのビットを記述していません)。
テキストボックスに入力できる内容をテキストで示します.CDBLは小数点以下2桁の数値、CINTは小数点以下0桁の数値、CSTRは適切なテキスト、CSENTENCEは文章のテキストです。
clsControlText
というクラスモジュールを作成します。
は、クラスモジュールにこのコードを追加します。
Public WithEvents txtBox As MSForms.TextBox
Private Sub txtBox_Change()
Static LastText As String
Static SecondTime As Boolean
Const MaxDecimal As Integer = 2
Const MaxWhole As Integer = 1
With txtBox
If InStr(.Tag, ";") > 0 Then
Select Case Split(.Tag, ";")(1)
Case "CDBL", "CCur"
'Allow only numbers with <=2 decimal places
If Not SecondTime Then
If .Text Like "[!0-9.-]*" Or Val(.Text) < -1 Or _
.Text Like "*.*.*" Or .Text Like "*." & String$(1 + MaxDecimal, "#") Or _
.Text Like "?*[!0-9.]*" Then
Beep
SecondTime = True
.Text = LastText
Else
LastText = .Text
End If
End If
SecondTime = False
Case "CINT"
'Allow only whole numbers.
If .Text Like "[!0-9]" Or Val(.Text) < -1 Or .Text Like "?*[!0-9]*" Then
Beep
.Text = LastText
Else
LastText = .Text
End If
Case "CSTR"
'Convert text to proper case.
.Text = StrConv(.Text, vbProperCase)
Case "CSENTENCE"
'Convert text to sentence case (capital after full-stop).
.Text = ProperCaps(.Text)
Case Else
'Allow anything.
End Select
End If
End With
End Sub
Private Function ProperCaps(strIn As String) As String
Dim objRegex As Object
Dim objRegMC As Object
Dim objRegM As Object
Set objRegex = CreateObject("vbscript.regexp")
strIn = LCase$(strIn)
With objRegex
.Global = True
.ignoreCase = True
.Pattern = "(^|[\.\?\!\r\t]\s?)([a-z])"
If .Test(strIn) Then
Set objRegMC = .Execute(strIn)
For Each objRegM In objRegMC
Mid$(strIn, objRegM.firstindex + 1, objRegM.Length) = UCase$(objRegM)
Next
End If
ProperCaps = strIn
End With
End Function
は、ユーザーフォームにこのコードを追加します。
Private colTextBoxes As Collection
Private Sub UserForm_Initialize()
Dim ctrlSelect As clsControlText
Dim ctrl As Control
Me.Caption = ThisWorkbook.Name
Set colTextBoxes = New Collection
For Each ctrl In Me.Controls
Select Case TypeName(ctrl)
Case "TextBox"
Set ctrlSelect = New clsControlText
Set ctrlSelect.txtBox = ctrl
colTextBoxes.Add ctrlSelect
End Select
Next ctrl
End Sub
NBを:すべてこのコードは私のものです。私はProperCaps
とCDBLのコードをこのサイトの他の場所、またはMrExcelというコードで見つけました。
を使用することができます!どうもありがとう! –
KeyAsciiでそれを行う方法があるのだろうか?確かに道があるはずですか? –