如题。我想将一串数字字符串如:(12+34)*15+23*3/16  我想得其结果,给位有什么办法?

解决方案 »

  1.   


    '方法一:
    '引用Microsoft Script Control 1.0
    Private Sub Command1_Click()
        Dim MSSC As New ScriptControl
        MSSC.Language = "VBScript"
        MsgBox "计算表达式的结果是: " & MSSC.Eval("(12+34)*15+23*3/16")
        Set MSSC = Nothing
    End Sub
      

  2.   

    Dim strTemp As String
    Dim numTemp As Integer
    strTemp = (12 + 34) * 15 + 23 * 3 / 16
    numTemp = Str(strTemp)结果显示为:694Dim strTemp As String
    Dim numTemp As Double
    strTemp = (12 + 34) * 15 + 23 * 3 / 16
    numTemp = Str(strTemp)结果显示为:694.3125
      

  3.   

    方法3: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 LongPrivate Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
        ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
    End Function
    Sub calc(ByVal x As String)
    Dim result
    ExecuteLine "dim x as double"
    ExecuteLine "x= " & x
    ExecuteLine "clipboard.settext x"
    result = Clipboard.GetText
    MsgBox x & "=" & result
    Set result = Nothing
    End SubPrivate Sub Command1_Click()
    calc Text1
    End SubPrivate Sub Form_Load()
    Text1.Text = "(12 + 34) * 15 + 23 * 3 / 16"
    End Sub
      

  4.   


     MmMVP马甲 还挺利索的啊
      

  5.   

    MmMVP马甲的办法有个缺点,就是会冲刷调系统剪贴板的内容,下面我公布不使用剪贴板的方法:但是需要一个"中间变量":一个专用的文本框,名称:txtExecuteLine下面是源代码":Private Declare Function EbExecuteLine Lib "vba6.dll" ( _
        ByVal pStringToExec As Long, _
        ByVal Unknownn1 As Long, _
        ByVal Unknownn2 As Long, _
        ByVal fCheckOnly As Long) As LongPrivate Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
        On Error Resume Next
        ExecuteLine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
    End FunctionFunction CalcStringExpression(ByVal szIn As String) As Long
        On Error GoTo Z
        Form1.txtExecuteLine.Text = "0"
        ExecuteLine "s=" & szIn & ": Form1.txtExecuteLine.Text =s"
        CalcStringExpression = Val(Form1.txtExecuteLine.Text)
        Exit Function
    Z:
        CalcStringExpression = 0
    End Function'开始计算:
    Private Sub Command1_Click()
        MsgBox CalcStringExpression("(12+34)*15+23*3/16")
    End Sub
      

  6.   

    Form1.txtExecuteLine.Text的内容为:694.3125
      

  7.   

    调用"vba6.dll"有个历史性问题,就是在编译后,无法使用。
    引用Microsoft Script Control 1.0是个解决之道。
      

  8.   

    TO:小吉是啊,呵呵,忘记说了只能在设计时才有效了另外,该了下该函数:Function CalcStringExpression(ByVal szIn As String) As Single
        On Error GoTo Z
        Form1.txtExecuteLine.Text = "0"
        ExecuteLine "s=" & szIn & ": Form1.txtExecuteLine.Text =s"
        CalcStringExpression = Val(Form1.txtExecuteLine.Text)
        Exit Function
    Z:
        CalcStringExpression = 0
    End Function
      

  9.   

    还是我前面说的方法一简单多了引用Microsoft Script Control 1.0
      

  10.   

    还是上面的几位厉害。我在实际中也用到了。但是我是自己写了个函数。能完成+-*/\,abs,cos等功能。但是由于"()"这个东西确实讨厌....
      

  11.   

    colin0613(红三天) 的方法最简单了.
      

  12.   

    晕!colin0613(红三天) 的方法是解吗?Dim strTemp As String
    Dim numTemp As Double
    strTemp = (12 + 34) * 15 + 23 * 3 / 16
    numTemp = Str(strTemp)
    debug.print numTemp==>Dim strTemp As String
    Dim numTemp As Double
    strTemp = (12 + 34) * 15 + 23 * 3 / 16
    debug.print strTemp==>Dim numTemp As Double
    numTemp = (12 + 34) * 15 + 23 * 3 / 16
    debug.print numTemp==>debug.print (12 + 34) * 15 + 23 * 3 / 16嘿!经过我化简,原来一句就搞定了!
      

  13.   

    晕!colin0613(红三天) 的方法不是解啊