代码如下,问题如题: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 Sub Command1_Click()
    s = "debug.print 1>" & """2007-1-2"""
    EbExecuteLine StrPtr(s), 0&, 0&, 0&
End Sub4小时没能解决,只好等高手了!

解决方案 »

  1.   

    加一句 on error resume next 试试Private Sub Command1_Click()
      on error resume next
      s = "debug.print 1>" & """2007-1-2"""
      EbExecuteLine StrPtr(s), 0&, 0&, 0&
    End Sub
      

  2.   

    Option Explicit
    Private Declare Function EbExecuteLine Lib "vba6.dll" _
        (ByVal pStringToExec As Long, ByVal Foo1 As Long, _
         ByVal Foo2 As Long, ByVal fCheckOnly As Long) As LongPrivate Sub Command1_Click()
      Dim s As String
      s = "debug.print cstr(1)>" & """2007-1-2"""
      EbExecuteLine StrPtr(s), 0&, 0&, 0&
    End Sub
      

  3.   

    或者
    private sub ....
    on error goto aaaexit sub
    aaa:
      '空
      

  4.   

    1、s 的值根本就无法预知,所以 chrl 的办法不行。
    2、 on error 根本就捕获不到错误。孤独剑和罗峰无痕的解法不行,这个问题看上去简单,解决起来可不一定简单啊。要不然我也不会花4个小时解决。问题的目标是计算一个不可预知的表达式字符串的值,但该表达式可能不合法。如何避免出现 "类型不匹配“的错误弹出。也不一定非得限于使用 EbExecuteLine 这个api,有其他的解决办法也行啊!继续期待答案。
      

  5.   

    晕,你的那个 API 编译后运行就出错,程序都崩溃了……
    -_-b
      

  6.   

    ' Form1 中添加 Text1
    ' 引用 Microsoft Script Control
    Option ExplicitPrivate Sub Form_Load()
       Text1.Text = ""
    '   Text1 = "8+25*sqr(6)"
    End SubPrivate Sub Command1_Click()
       Dim SC As New ScriptControl, s As String
       On Error GoTo E_Handle
       If (Text1 = "") Then MsgBox "请输入表达式!", 48: Exit Sub
       SC.Language = "VBscript"
       SC.AddObject "form1", Form1
       s = Replace("Form1.Text1 = ""$ = "" & (", "$", Text1) & Text1.Text & ")"
       Call SC.ExecuteStatement(s)
       Exit Sub
    E_Handle:
       MsgBox "出现异常!", 48
    End Sub
      

  7.   


    Private Declare Function EbExecuteLine Lib "vba6.dll" (ByRef pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As Long
    Private Declare Function GetLastError Lib "kernel32" () As LongDim s As String
    Private Sub Command1_Click()
        Dim lngP As Long
        s = "debug.print 1>" & """2007-1-2"""
        EbExecuteLine StrPtr(s), 0, 0, 0
        Debug.Print s
        Debug.Print GetLastError
    End Sub这样不报错,且GetLastError没有返回错误
      

  8.   

    这样是没报错,可是 s 中的语句似乎根本没有被执行。用 2F 的代码,在 IDE 下运行时,会在立即窗口中输出 False 。
      

  9.   

    建议引用 Microsoft Script Control
    用ScriptControl 解决比较妥当
      

  10.   

    不要把时间浪费在 EbExecuteLine 上,它只在 VB-IDE 中有效。
      

  11.   

    嗯,使用Microsoft Script Control脚本控件。
      

  12.   

    EbExecuteLine是一个无聊的游戏而已,看看EbExecuteLine所在的DLL导出库就知道这东西没用