はじめまして。
VBのテキストボックスに値を入力していき、ある桁数になるとメッセージを表示する仕組みを作りたいと考えています。
例えばVBで用意したテキストボックスにキーボードで123と入力しキーボードの4を押した直後に「桁数は3桁までです。」というメッセージを表示したいのですがいい方法を教えていただけないでしょうか?
自分で以下のように作ってみたのですがこれだとキーボードで123と入力し次に4を入力した時にテキストボックスに4が表示されてからエラーが出ます。そうではなく4をテキストボックスに表示させずに4をおしたら以下のメッセージが出るようにしたいのです。
よろしくお願い致します。
Private Sub text1_Change()
If Len(text1.Text) > 3 Then
MsgBox "桁数は3桁までです。", vbOKOnly + vbInformation, "情報"
End If
End Sub
No.3ベストアンサー
- 回答日時:
入力する文字の条件が微妙ですが、こんなような感じでしょうか。
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Len(Text1.Text) >= 3 And _
((KeyAscii >= Asc("A") And KeyAscii <= Asc("z")) _
Or (KeyAscii >= Asc("0") And KeyAscii <= Asc("9"))) Then
MsgBox "桁数は3桁までです。", vbOKOnly + vbInformation, "情報"
KeyAscii = 0
End If
End Sub
この回答への補足
お世話になります。
ありがとうございます。うまくいきました。
それからもう一つ要望なのですが数値以外の値を入力した時は「数値以外は入力できません。」というメッセージをを出し入力受け付けないようにしたいのですがどうすれば良いでしょうか?
以下のように考えてみたのですが上手くいきません。よろしくお願い致します。
Private Sub Text1_KeyPress(KeyAscii As Integer)
If IsNumeric(Right(Text1.Text, 1)) = False Then
MsgBox "数値以外です。"
KeyAscii = 0
Exit Sub
End If
If Len(Text1.Text) >= 3 And _
((KeyAscii >= Asc("A") And KeyAscii <= Asc("z")) _
Or (KeyAscii >= Asc("0") And KeyAscii <= Asc("9"))) Then
MsgBox "桁数は3桁までです。", vbOKOnly + vbInformation, "情報"
KeyAscii = 0
End If
End Sub
※1桁目が数値以外だと受け付けませんが1桁目が数値で2桁目が数値以外ならそれは受け付けずに2桁目から 再度入力できるようにしたいと思っています。
よろしくお願い致します。
お世話になります。
数値以外の入力ですが自分で調べたら以下の方法で上手くいきました。アドバイスありがとうございます。
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyBack Then Exit Sub
If Not Chr(KeyAscii) Like "[0-9]" Then
KeyAscii = 0
MsgBox "数値以外です。"
Else
If Len(Text1.Text) >= 3 And _
((KeyAscii >= Asc("A") And KeyAscii <= Asc("z")) _
Or (KeyAscii >= Asc("0") And KeyAscii <= Asc("9"))) Then
MsgBox "桁数は3桁までです。", vbOKOnly + vbInformation, "情報"
KeyAscii = 0
End If
End If
End Sub
No.5
- 回答日時:
s_husky です。
実際は、サンプルのような使い方はできません。
メインで昔むかーしのように全体のテキストボックスを管理しなければなりません。
あくまでも、チェック要領の参考に!
No.4
- 回答日時:
少し、趣の変わった回答です。
Private Sub Text1_KeyPress(KeyAscii As Integer)
EditText KeyAscii, "INTEGER", 3
End Sub
これで、Text1には3桁の数字しか入力できません。
OSがWindows98までを想定した関数ですので多少XP版にするには手直しが必要です。
が、まあ、一々、テキストボックスの入力チェックルーチンを書くのも手間です。
このような関数を使うのも手です。
' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
' 入力テキストボックスを編集する関数
' <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Sub EditText(ByRef KeyAscii As Integer, ByVal ColType, ByVal MaxLength As Integer)
Dim I As Integer
Dim L As Integer
Dim R As Integer
Dim Del As Integer
Dim Text As String
Dim RStr As String
Dim Start As Integer
Dim Suji As Integer
Dim Uwagaki As Boolean
If TypeOf Screen.ActiveControl Is TextBox Then
Select Case KeyAscii
Case 0, 3, 8, 13, 24, 26, 27
Case 22
'Temp = Clipboard.GetText(vbCFText)
'L = Len(Temp)
'For I = 1 To L
'EditText Asc(Mid(Temp, I, 1)), ColType
'Next I
Case Else
'Uwagaki = Screen.ActiveForm.ModeButton.Enabled
Uwagaki = True
Start = Screen.ActiveControl.SelStart
Text = Screen.ActiveControl.Text
If Uwagaki Then
'
' カーソル位置の文字を消すと、結果として上書きされます
'
L = Len(Text)
' 末尾以外のみ上書き処理
If Start < MaxLength Then
If Start < L Then
' 最低1文字は消去
' 全角入力で半角の上は2文字消去
Del = 1 + (LenB(Mid(Text, Start + 1, 1)) = 1) * (KeyAscii < 0)
' 上書き箇所より右の残存文字数を求める
R = L - Start - Del
If R > 0 Then
RStr = Right$(Text, R)
End If
End If
Text = Left$(Text, Start) & RStr
Else
MsgBox "定められた桁数以上は入力出来ません。"
KeyAscii = 0
End If
End If
If InStr(1, "INTEGER, SMALLINT, DECIMAL, MONEY", Trim(UCase(ColType)), vbTextCompare) > 0 Then
Suji = True
Select Case KeyAscii
Case Asc("-")
Suji = InStr(1, Text, "-", vbTextCompare) = 0 And Start = 0
Case Asc(".")
Suji = InStr(1, Text, ".", vbTextCompare) = 0
Case Is < Asc("0"), Is > Asc("9")
Suji = False
End Select
If Not Suji And KeyAscii <> 0 Then
MsgBox "数字以外の文字は入力出来ません!"
KeyAscii = 0
'Text = ""
'Start = 0
End If
End If
Screen.ActiveControl.Text = Text
Screen.ActiveControl.SelStart = Start
End Select
End If
End Sub
この回答への補足
お世話になります。
ご回答ありがとうございます。
今後の参考にさせていただきます。
ところでRight・Left関数に付いてる「$」マークは何か意味があるのでしょうか?
MSDNで調べても見つからなかったのでご存知でしたら教えていただきたいです。
よろしくお願いします。
No.2
- 回答日時:
いろいろなやり方があるでしょうが、
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Len(Text1.Text) >= 3 And (KeyAscii < 0 Or KeyAscii > 31) Then
MsgBox "桁数は3桁までです。", vbOKOnly + vbInformation, "情報"
KeyAscii = 0
End If
End Sub
制御文字は考慮していますが、全角入力はあまり考慮していません。
なおご存知かもしれませんが、TEXT のプロパティの MaxLength を変更すれば、
メッセージは出ませんが文字数制御はできます。
お世話になります。
ご回答ありがとうございます。
MaxLengthについても自分で勉強してみます。
これからもよろしくお願いします。
No.1
- 回答日時:
あ、この辺の制御は最近やってないな(^^;
とりあえず、以下のようなコードなら出来ますね。ちらつきを防ぐために Visible プロパティも操作してみました。
If Len(Text1.Text) > 3 Then
Text1.Visible = False
Text1.Text = Left$(Text1.Text, Len(Text1.Text) - 1)
Text1.Visible = True
MsgBox "桁数は3桁までです!"
Exit Sub
End If
ちょっとトリッキー? スマートな解決策があったら回答者も知りたいです(笑)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) エクセルのマクロを教えてください。 1 2023/01/27 09:05
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Visual Basic(VBA) VBAユーザーフォームでテキストボックスについて。 1 2022/05/31 12:23
- Visual Basic(VBA) Vba テキストボックスの文字列をボタンで入力するとテキストボックスの端の文字列が更新されない 2 2022/05/21 23:32
- Visual Basic(VBA) excel vba でユーザーフォーム入力ができない 2 2022/12/12 14:42
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VBでの簡易電卓の作成(減算方法)で困っています。
Visual Basic(VBA)
-
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
VB初心者。小数点以下の表示でつまづいています(涙
Visual Basic(VBA)
-
-
4
visual basic初心者です。 visual studioで電卓を作成しています。 実行時にテ
Visual Basic(VBA)
-
5
VB.NETのテキストボックスの書式指定
Visual Basic(VBA)
-
6
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
7
文字列の後ろから必要分だけ削除したい。
Visual Basic(VBA)
-
8
Designer.vbは直接コードをいじってはだめ?
Visual Basic(VBA)
-
9
return trueとreturn falseの用途・違いは・・・?
JavaScript
-
10
0での割り算
Visual Basic(VBA)
-
11
VB初心者。小数点以下の表示でつまづいています(2
Visual Basic(VBA)
-
12
値を返さないコード パス
Visual Basic(VBA)
-
13
VBで電卓の=
Visual Basic(VBA)
-
14
複数のtextboxの処理を一括で行えませんか?
Visual Basic(VBA)
-
15
textboxユーザーコントロールのコピー&ペースト制御
Visual Basic(VBA)
-
16
TextBoxでEnterキーを押すと、にあるButtonを押したのと同じ効果を出す方法
Visual Basic(VBA)
-
17
Hideについて(.NET)
Visual Basic(VBA)
-
18
データセットのレコード更新がしたい
Visual Basic(VBA)
-
19
SPREAD(GrapeCity)のセルにフォーカスを設定するにはどうしたらいいのでしょうか?
Visual Basic(VBA)
-
20
VB6で電卓を作っているのですが誰か教えてください
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスできない保護レベルエ...
-
エクセルVBAでテキストボッ...
-
ユーザーフォームへのデータ入...
-
TextBoxの内容を右寄せ
-
【C#】コンボボックスにおけるS...
-
【VB.NET】テキストボックスに...
-
VBAのフォーム カーソル移動
-
VBAで入力数値について
-
VBSのプログラム
-
C#のループでtextboxに値を入れ...
-
三項でたとえば交換って
-
レコードセットにnullの場合
-
VBA public変数はどのようなこ...
-
C言語のサフィックスについて
-
他のフォームから別のフォーム...
-
ExcelのVBAで文章にある複数の...
-
Functionの戻り値を配列にした...
-
エクセル・VBAでテキストボック...
-
VB.NETでのイベントの途中終了
-
XMLファイルのattribute値がう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでテキストボッ...
-
VBAで入力数値について
-
ユーザーフォームへのデータ入...
-
アクセスできない保護レベルエ...
-
【VB.NET】テキストボックスに...
-
visual basic初心者です。 visu...
-
Excel ユーザーフォームで計算 ...
-
コンボボックスからテキストボ...
-
テキストボックスを空白にする方法
-
【C#】コンボボックスにおけるS...
-
VBAのユーザーフォームで、テキ...
-
テキストボックスに大文字を
-
テキストボックス1の値に対する...
-
テキストボックスとカーソルの制御
-
整数かどうかチェックする
-
Vba テキストボックスの文字列...
-
VBAのフォーム カーソル移動
-
VBSのプログラム
-
ACCESS 除算での小数点切上げ方法
-
TextBoxの内容を右寄せ
おすすめ情報