我知道有一个窗体的字符串,但是我现在想调用这个窗体,就是Show出来,但在Show之前(也就是Form_Load之前我有一个属性  DocType 要进行赋值 )  我用了各种方法,但是还是有问题,望各位大虾援手。
StrFormLoadName ="Bas_Info"
1.
    Dim F as Form     set F=Forms.Add(StrFormLoadName)
    F.Show
2              Set F= Forms.Add(StrFormLoadName)               Set AA = CreateObject("MSScriptControl.ScriptControl")
               AA.Language = "vbscript"
               AA.AddObject StrFrm, NewForm
               AA.ExecuteStatement (StrFormLoadName & ".DOCType=""02""")
               AA.ExecuteStatement (StrFormLoadName & ".Show")
  这里引用了ScriptControl 要注意
3
Public Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Unknownn1 As Long, ByVal Unknownn2 As Long, ByVal fCheckOnly As Long) As LongPublic Function ExecuteLine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
       ExecuteLine = EbExecuteLine(ByVal StrPtr(sCode), 0&, 0&, fCheckOnly) = 0
End Function
                ExecuteLine StrFrm & ".DOCType=""02"""
                ExecuteLine StrFrm & ".Show"第三种最完美,但是是调试的时候,编译之后一运行这个ExecuteLine  整个个系统就跳出来了,5~  这是怎么加速呀,请各位大虾帮忙

解决方案 »

  1.   


    Private Sub Form_Initialize()
        Dim F As Form
        Dim StrFormLoadName As String
        StrFormLoadName = "Bas_Info"
        Set F = Form1
        F.Show
        F.Caption = StrFormLoadName
    End Sub
      

  2.   

    这好象是传递给API的参数类型出现问题,EbExecuteLine声明时fCheckOnly为Long,而ExecuteLine可选参数fCheckOnly为Boolean,其默认值是False,因为是ByVal传递,将不会进行强制类型检查,其会导致EbExecuteLine访问了一个不可预知的内存地址,一般的结果是“非法操作”。
    正确的写法是
    ExecuteLine = EbExecuteLine(ByVal StrPtr(sCode), 0&, 0&, ABS(fCheckOnly)) = 0
    当然,不怕可读性差点的话,可将ExecuteLine的fCheckOnly参数声明为Long。
      

  3.   

    To  homezj(小吉)  也是一样的,我以前就是那样的,结果是一样
      

  4.   

    我的意思很简单,就是说我知道一个窗体的名称比如说“Form1” 我要把它Show出来,本来也就简单 F=Forms.Add(“Form1”) 就是了,可是我现在在Form1_Load之前,还有一个属性, 比如说Form1.Type="02" 要执行,不能在Form1_Load 之后执行
      

  5.   

    试试在 Private Sub Form_Initialize()事件里面
    写,他在form_load前运行
      

  6.   

    Option ExplicitPrivate m_arryForms() As Form1 '窗口的指针数组
    Private m_nCount As Integer '窗口的个数Private Sub Command1_Click()ReDim Preserve m_arryForms(m_nCount)
    Set m_arryForms(m_nCount) = New Form1'可以把Caption属性换成你的DOCType属性
    m_arryForms(m_nCount).Caption = "第" & m_nCount & "个窗口"
    m_arryForms(m_nCount).Showm_nCount = m_nCount + 1 '又多了一个窗口
    End Sub
      

  7.   

    我把上面的代码又改了一下,先添加一个 Form1 ,在Form1上添加Command1按钮,不过在按Option ExplicitPrivate m_arryForms() As Form1 '窗口的指针数组
    Private m_nCount As Integer '窗口的个数Private m_nDocType As IntegerPublic Property Let DocType(nType As Integer)
        m_nDocType = nType
    End PropertyPublic Property Get DocType() As Integer
        DocType = m_nDocType
    End PropertyPrivate Sub Command1_Click()ReDim Preserve m_arryForms(m_nCount)
    Set m_arryForms(m_nCount) = New Form1m_arryForms(m_nCount).DocType = m_nCount
    m_arryForms(m_nCount).Show
    m_arryForms(m_nCount).Caption = "第" & m_nCount & "个子窗口"
    m_arryForms(m_nCount).Command1.Enabled = False
    m_nCount = m_nCount + 1 '又多了一个窗口
    End SubPrivate Sub Form_Initialize()
    '无论如何都显示 0,因为 New 以后就调用本过程
    Debug.Print "INIT", "DocType=" & Me.DocType
    End SubPrivate Sub Form_Load()
    Me.Caption = "主窗口" '区别其他Form1 窗口
    '你会发现DocType属性已经被改变
    Debug.Print "LOAD", "DocType=" & Me.DocType
    End Sub
      

  8.   

    Dim m_arryForms(m_nCount) = New Form1    我是没有办法知道这个Form1 
    应该是我只知道有个“Form1”   然后我要用 F=Forms.Add(“From1”)这个函数这加这个窗体,但是用Forms.Add的时候就已经有Form_Load 这个事件触发了,但如果我不加这个 然后我知道这个属性由于也只知道是字符串 所以我才会想到用ExecuteLine StrFrm & ".DOCType=""02"""这个方法 的呀
      

  9.   

    只要在设计的时候 添加一个(也必须在设计的时候添加一个,否则没有DOCType属性) 你想要的、有DOCType属性的 form,就可以解决了啊。 名字可以换成别的,也就是不要跟主窗体一样就好了,