String型の「計算式」の答えを求める

解決


なかの  2004-12-13 16:57:14  No: 118273  IP: [192.*.*.*]

VB6.0SP5使用です。

Text1に、「1+5+2.5+10-2」というような、
加算と減算のみの計算式を入力します。
この計算式の答えを求めるのに、
1文字ずつループで+と-を判別して数値を足しこんで・・・
という方法の他に、何か簡易な方法はありませんでしょうか。
(入力されたものは余計な文字を含まず、
計算式としてきちんと完成している、という前提で)

よろしくお願いします。

編集 削除
ぴろあき  2004-12-13 17:08:05  No: 118274  IP: [192.*.*.*]

電卓にコピペしてエンター送信とか。。。

編集 削除
ぴろあき  2004-12-13 17:09:59  No: 118275  IP: [192.*.*.*]

この程度の計算だと、かえって面倒か・・・(^^;)

編集 削除
LESIA  2004-12-13 17:37:06  No: 118276  IP: [192.*.*.*]

スクリプトを使う方法があるんだけど、あえてAPIを使う方法を^^;

Form1にText1とText2があって、Command1をクリックするとText1の
式の答えがText2に表示されるものです。

Option Explicit

Private Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long

Private Sub Command1_Click()
    ExecuteLine "var=" & Text1.Text & ":Form1.Text2.Text=var"
End Sub

Private Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
    ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function

編集 削除
なかの  2004-12-15 10:09:59  No: 118277  IP: [192.*.*.*]

返信ありがとうございます。

>ぴろあきさん
電卓にペーストする方法を、調べて書いてみたんですが、
おっしゃるとおり、ループよりコーディング量が増えてしまいます。
でも、こんな方法もあるんだと勉強になりました。

>LESIAさん
かなり希望に近い動作です。
結果を直接変数に持ちたかったんですが、そういう方法はない(?)
みたいですね(翻訳自信ありませんが;
不可視のテキストボックスを用意して、このAPIを使わせていただきます。


どうもありがとうございます。本当に助かりました。
今後とも、よろしくお願いします。

編集 削除
なかの  2004-12-15 10:10:22  No: 118278  IP: [192.*.*.*]

解決チェック忘れました・・すみません。

編集 削除
Dental  2004-12-15 11:38:25  No: 118279  IP: [192.*.*.*]

EbExecuteLine って、開発環境なら、0,0指定だけで呼べますけど、
exeにコンパイルした後だと、そのままでは実行できないような…。


使い古された手ですが、
「ScriptControlを使う」
「SQLを利用する」
「ExcelのApplication.Evaluateメソッドを使う」
「自前で演算する(CALC.VBPサンプルを参考に)」
などの方が無難かと思います。解決済みなので、今更ですけど。

編集 削除
なかの  2004-12-15 16:08:56  No: 118280  IP: [192.*.*.*]

>Dentalさん
おっしゃる通りでした・・・コンパイルすると、vba.dllが見つからない、
と言われて実行できません。
Tips探すも、0,0指定で紹介しているところしか見つけられませんでした。

>LESIAさん
せっかく教えていただいたのに、有効に活用できなくてすみませんでした。
是非マスターしたい機能なので、今後ゆっくり英文ヘルプを解いていこうと思います。


今回は、当初のループ処理でいこうと思います。
ご紹介いただいた方法(Script等)、今後時間を作って勉強したいと思います。

返信ありがとうございました。

編集 削除
これじゃだめ?  2004-12-16 09:57:10  No: 118281  IP: [192.*.*.*]

Dim Rep As String
Dim Temp() As String
Dim i As Long
Dim A As Double
Rep = Replace(Text1.Text, "-", "+-")
Temp = Split(Rep, "+")
    For i = LBound(Temp) To UBound(Temp)
        A = A + CDbl(Temp(i))
    Next i
    Debug.Print A

編集 削除