'方法一: '引用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
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: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
MmMVP马甲 还挺利索的啊
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
Form1.txtExecuteLine.Text的内容为:694.3125
调用"vba6.dll"有个历史性问题,就是在编译后,无法使用。 引用Microsoft Script Control 1.0是个解决之道。
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
'方法一:
'引用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
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
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
MmMVP马甲 还挺利索的啊
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
引用Microsoft Script Control 1.0是个解决之道。
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
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嘿!经过我化简,原来一句就搞定了!