已解决分享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 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 Sub Private Sub Command1_Click() calc Text1 End Sub Private Sub Form_Load() Text1.Text = "1+2*3-4/5" End Sub
新问题,如果是变量呢??a=1 b=2 c=3 text1=a+b+c,怎么处理??
你只要写text1.text=a+b+c就行了, a,b,c让用户输入,比如用inputbox
晕~,用eval()几行就搞定了,哪里还要用到API。呵呵''引用了Script Control 1.0组件 Dim e As New ScriptControl Text1 = "1+3+5*3" e.Language = "vbscript" Text2 = e.Eval(Text1)
用过一个类模块,PSC上的,感觉还不错,分享一下:'Class Math Option ExplicitPublic Function Pi() As Double Pi = 3.14159265358979 End FunctionPublic Function Sec(ByVal Radians As Double) As Double Dim Cosine As Double
Cosine = Cos(Radians) If Abs(Cosine) <= 0.001 Then Sec = 9999.999999 Else Sec = 1 / Cosine End If End FunctionPublic Function Csc(ByVal Radians As Double) As Double Dim Sine As Double Sine = Sin(Radians) If Abs(Sine) <= 0.001 Then Csc = 9999.999999 Else Csc = 1 / Sine End If End FunctionPublic Function Cot(ByVal Radians As Double) As Double Dim Sine As Double Sine = Sin(Radians) If Abs(Sine) <= 0.001 Then Cot = 9999.999999 Else Cot = Cos(Radians) / Sine End If
End FunctionPublic Function Pow(base As Double, expon As Double) As Double Pow = Exp(expon * Log(base)) End FunctionPublic Function Add(ByVal x As Double, ByVal y As Double) Add = x + y End FunctionPublic Function Multiply(ByVal x As Double, ByVal y As Double) Multiply = x * y End FunctionPublic Function Division(ByVal x As Double, ByVal y As Double) Division = x / y End FunctionPublic Function Subtract(ByVal x As Double, ByVal y As Double) Subtract = x - y End Function
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 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 Sub Private Sub Command1_Click()
calc Text1
End Sub Private Sub Form_Load()
Text1.Text = "1+2*3-4/5"
End Sub
晕~,用eval()几行就搞定了,哪里还要用到API。呵呵''引用了Script Control 1.0组件
Dim e As New ScriptControl
Text1 = "1+3+5*3"
e.Language = "vbscript"
Text2 = e.Eval(Text1)
Option ExplicitPublic Function Pi() As Double
Pi = 3.14159265358979
End FunctionPublic Function Sec(ByVal Radians As Double) As Double
Dim Cosine As Double
Cosine = Cos(Radians)
If Abs(Cosine) <= 0.001 Then
Sec = 9999.999999
Else
Sec = 1 / Cosine
End If
End FunctionPublic Function Csc(ByVal Radians As Double) As Double
Dim Sine As Double Sine = Sin(Radians)
If Abs(Sine) <= 0.001 Then
Csc = 9999.999999
Else
Csc = 1 / Sine
End If
End FunctionPublic Function Cot(ByVal Radians As Double) As Double
Dim Sine As Double Sine = Sin(Radians)
If Abs(Sine) <= 0.001 Then
Cot = 9999.999999
Else
Cot = Cos(Radians) / Sine
End If
End FunctionPublic Function Pow(base As Double, expon As Double) As Double
Pow = Exp(expon * Log(base))
End FunctionPublic Function Add(ByVal x As Double, ByVal y As Double)
Add = x + y
End FunctionPublic Function Multiply(ByVal x As Double, ByVal y As Double)
Multiply = x * y
End FunctionPublic Function Division(ByVal x As Double, ByVal y As Double)
Division = x / y
End FunctionPublic Function Subtract(ByVal x As Double, ByVal y As Double)
Subtract = x - y
End Function