- ベストアンサー
アクセスで「8+9」→Enter→「17」としたい
環境:XP&ACCESS2003 フォーム上にテキストボックスがあります。 このテキストボックスに、例えば「8+9」と入力しEnterを押すと「17」と表示されるようにしたいのですが。なお、「+」以外は使いません。何かいい方法をご存じないでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>例えば「8+9」と入力しEnterを押すと「17」と表示されるようにしたい #4の方も回答してありますが テキストボックスのプロパティでフォーカスの喪失時のイベントで Private Sub テキスト0_Exit(Cancel As Integer) Me!テキスト0 = Eval(テキスト0) End Sub とすれば出来ます。 Enterキーを押してフォーカスが次のコントロールに移動するときに8+9であれば17となります。 Evalを使えば+だけでなく*や-でも評価して値を返してくれます。
その他の回答 (4)
- bonaron
- ベストアンサー率64% (482/745)
Enterキー以外でも実行されてしまいますが。 Private Sub テキスト0_AfterUpdate() On Error Resume Next テキスト0 = Eval(テキスト0) End Sub
- ipsum11
- ベストアンサー率21% (55/251)
テキストボックスの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, "+")
まあ、何でもかんでも 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
- ept63
- ベストアンサー率21% (54/247)
テキストボックスの値をを一文字づつ判定して”+”を割り出します。 ”+”の前後の数値を変数に退避後足してテキストボックスの値に返します。イベントはフォーカスが外れるときを使うと自然な動きになると思いますが、キーダウンで”ENTER”を拾うとご質問の動作になると思います。