重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

環境:XP&ACCESS2003
フォーム上にテキストボックスがあります。
このテキストボックスに、例えば「8+9」と入力しEnterを押すと「17」と表示されるようにしたいのですが。なお、「+」以外は使いません。何かいい方法をご存じないでしょうか。

A 回答 (5件)

>例えば「8+9」と入力しEnterを押すと「17」と表示されるようにしたい


#4の方も回答してありますが
テキストボックスのプロパティでフォーカスの喪失時のイベントで
Private Sub テキスト0_Exit(Cancel As Integer)
Me!テキスト0 = Eval(テキスト0)
End Sub
とすれば出来ます。
Enterキーを押してフォーカスが次のコントロールに移動するときに8+9であれば17となります。
Evalを使えば+だけでなく*や-でも評価して値を返してくれます。
    • good
    • 0

Enterキー以外でも実行されてしまいますが。



Private Sub テキスト0_AfterUpdate()
  On Error Resume Next
  テキスト0 = Eval(テキスト0)
End Sub
    • good
    • 0

テキストボックスのKeyDownイベントで、


If KeyCode = vbKeyReturn Then
 'ここに処理
End If
とします。
処理内容は、
「Val(Left(TextBox.Text, InStr(1, TextBox.Text, "+") - 1)) +
Val(Mid(TextBox.Text, InStr(1, TextBox.Text, "+") + 1))」
とでもします。
ただし上記の例では、「+」がひとつの場合なので、
複数あるときは「+」の位置を取得しながらそれぞれの数値を取得し、計算してください。ループ処理ですね。
1個目の[+]位置:InStr(1, TextBox.Text, "+")
2個目の[+]位置:InStr(InStr(1, TextBox.Text, "+") + 1, TextBox.Text, "+")
    • good
    • 0

まあ、何でもかんでも CutStr関数を使うのが私のやり方です。



Private Sub Test_AfterUpdate()
  Me.Test = Val(CutStr(Me.Test, "+", 1)) + Val(CutStr(Me.Test, "+", 2))
End Sub

Public Function CutStr(ByVal Text As String, _
            ByVal Separator As String, _
            ByVal N As Integer) As String
  Dim strDatas() As String
  
  strDatas = Split("" & Separator & Text, Separator, , 0)
  CutStr = strDatas(N * Abs((N <= UBound(strDatas))))
End Function
    • good
    • 0

テキストボックスの値をを一文字づつ判定して”+”を割り出します。


”+”の前後の数値を変数に退避後足してテキストボックスの値に返します。イベントはフォーカスが外れるときを使うと自然な動きになると思いますが、キーダウンで”ENTER”を拾うとご質問の動作になると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す