これは、Excel UseForm 内のテキスト ボックスの特定の検証に関する以前の質問の続きです。Sorceriはこのコードを取得するのに大いに役立ちましたが、今は微調整が必要です。テキストボックスごとに異なる検証を行う必要があります。「ツールボックス」の「コントロール」からテキストボックスを作成しました。彼らはそのように順番に名前を付けました。「info1」、「info2」、「info3」など。
ほとんどのテキストボックスの検証は以下で確認できます (「1-5」、「88」、および「99」)。ただし、2 つのテキスト ボックス ("1-3" と "88") は異なる方法で検証する必要があります。これに加えて、テキスト ボックスの 3 番目のグループ ("0-10" および "88") には、3 番目の検証セットが必要です。私は VBA とプログラミング全般にかなり慣れていませんが、すぐに習得できます。どんな助けでも大歓迎です。
明確にするために、ソルセリの括弧内の横に私自身の解説を追加しました. 改めまして、皆様。
Private Sub cmdEnter_Click()
Dim ctl As Control
For Each ctl In Me.Controls
'check to see if it is a textbox (I'm guessing I could specify which textboxes here, but I'm unsure)
If TypeOf ctl Is MSForms.TextBox Then
Dim tBox As MSForms.TextBox
Set tBox = ctl
'we have a textbox so validate the entry (Again, I'm hoping to make this into, "We found textbox variant A and so will validate its entry with validation A, etc)
If validateTextBox(tBox) Then
'did not validate so set focus on the control
MsgBox "Invalid Entry!", vbCritical, "Invalid!"
ctl.SetFocus
'release the object
Set tBox = Nothing
Exit Sub
End If
Set tBox = Nothing
End If
Next
End Sub
'validate a textbox's value and return true or false
Private Function validateTextBox(tb As MSForms.TextBox) As Boolean
Dim sValue As String
Dim bInvalid As Boolean
bInvalid = True
sValue = Trim(tb.Text)
If sValue = "1" Or sValue = "2" Or sValue = "3" Or sValue = "4" Or sValue = "5" Or sValue = "99" Or sValue = "88" Then
bInvalid = False
End If
'return the results
validateTextBox = bInvalid
End Function