现预祝各位新年快乐, 新年狂发财...作了一个简单测试代码,Form中加了一个脚本控件,一个按钮,代码如下:
Option ExplicitPrivate Sub Command1_Click()
    ScriptControl1.ExecuteStatement "Unload Me"
    'ScriptControl1.ExecuteStatement "MsgBox ""Testing"""
End Sub控件执行Unload命令出现Type Mismatch错误,而执行MsgBox是没问题的,这两个都是VB的全局
函数,应该也不用AddObject了。
当然这个问题,可以通过建一个过程,将Unload命令写在过程中,
然后使用AddCode,执行过程脚本(具体能不能行,会不会也出现Type Mismatch错误没试过),不过
我现在仅仅是想ExecuteStatement 用控件执行Unload Me,该如何处理?究竟是哪里的问题?

解决方案 »

  1.   

    一般来讲,使用脚本控件(ScriptControl)你只能执行VBSCript命令,并不能执行VB中的命令。
      

  2.   

    是unload语句的问题
    其实,你的问题用callbyname就可以解决
      

  3.   

    rainstormmaster(暴风雨 v2.0)大侠,又遇到您的帮忙,多谢!CallByName我知道可以,不过如果我想用ScriptControl又如何处理呢?
    您说的Unload语句问题,是指Unload不能用在ExecuteStatement这里还是我这里写错了? 
      

  4.   

    Unload 是VB的语法,不能直接用在VBScript里!
      

  5.   

    那如果要动态执行VB语法的语句(除了CallByName调用对象方法/属性等外),难道就没办法了吗?另外如何区分是VB语句还是VBScript语句,哪儿有相关文档说明?比如说MsgBox在VB及VBScript中都有,而Unload只有VB中有...
      

  6.   

    现在我想动态执行VB语句Unload Me,当然使用如rainstormmaster(暴风雨 v2.0)所说的CallbyName个人觉得也不行,要知道Callbyname是执行一个对象的方法,或者设置或返回一个对象的属性。
    CallByName(object, procedurename, calltype,[arguments()])而Unload方法就像Msgbox属于VB的一个全局方法,不从属于某个对象,既如此显然不能用Callbyname,不知我说的对不对?那么如何解决该问题呢?各位有何高见,本人可用分不多,只能再加50分......
      

  7.   

    现在我想动态执行VB语句Unload Me,当然使用如rainstormmaster(暴风雨 v2.0)所说的CallbyName个人觉得也不行,要知道Callbyname是执行一个对象的方法,或者设置或返回一个对象的属性。
    CallByName(object, procedurename, calltype,[arguments()])而Unload方法就像Msgbox属于VB的一个全局方法,不从属于某个对象,既如此显然不能用Callbyname,不知我说的对不对?那么如何解决该问题呢?各位有何高见,本人可用分不多,只能再加50分......
      

  8.   

    就是根据窗体名unload吧?这样:Private Sub Command2_Click()
        unloadForm ("Form1") '注意大小写敏感
    End SubPublic Sub unloadForm(ByVal FormName As String)
        Dim obj As Form
        For Each obj In Forms
            If obj.Name = FormName Then
                MsgBox "hh"
                Unload obj
            End If
        Next
        Set obj = Nothing
    End Sub
      

  9.   

    就是根据窗体名unload吧?这样:Private Sub Command2_Click()
        unloadForm ("Form1") '注意大小写敏感
    End SubPublic Sub unloadForm(ByVal FormName As String)
        Dim obj As Form
        For Each obj In Forms
            If obj.Name = FormName Then
                MsgBox "hh"
                Unload obj
            End If
        Next
        Set obj = Nothing
    End Sub
      

  10.   

    ScriptControl为支持ActiveX Scripting的脚本引擎(如VBScript, JScript等) 提供了简单的接口,对于VB中特有的如Unload显然是不能处理,故出现Type Mismatch的错误提示。
    对于全局函数Unload不能通过传命令方式处理,可以如楼上那样通过循环全局集合Forms,找到
    匹配窗体,然后Unload.
    如下是ScriptControls的简要描述及其支持的功能,仅供参考:
    ————————————————————————————————————————
    The ScriptControl provides a simple interface for hosting scripting engines that support ActiveX scripting. The ScriptControl object supports the following:· Any scripting language that supports ActiveX scripting.
    · A macro Run dialog box that lists available macros.
    · The ability to compile scripts and display rich error information describing any errors that may occur.
    · The ability to trap and display run-time errors that occur during script execution.
    · The ability to expose object model functionality to scripts.
    · The ability to expose global functions to scripts.
    · An Immediate window.· The ability to limit a script's execution both in terms of its functionality and its time limitations. 
    · The ability to use Microsoft script debugging tools to debug scripts written with a scripting-enabled version of Notepad.