在我的程序中声明了这样一个函数:
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 ELine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
ELine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function我在程序里用来加载窗体用的,就是给出窗体的名字,根据名字来动态加载已经存在但是尚未成为实例的窗体,比如这样:
ELine("Frm1.Show")问题在于调试环境中可以正常运行,但是编译之后,就会报错,找不到VBA6.dll,后来我copy这个文件到system32目录下面,又报错某某内存不能为读,我怀疑是不是没有正常注册,用regsvr32 vba6.dll进行注册,报告:“已加载vba6.dll,但没有找到DllRegisterServer输入点,无法注册这个文件。”然而根据窗体名字来动态加载窗体是我整个程序的运行基础啊,总不能让客户挂着VB的开发环境来用吧?各位大侠,如何解决这个问题?或者可以实现同样效果的方式也可以!
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 ELine(sCode As String, Optional fCheckOnly As Boolean) As Boolean
ELine = EbExecuteLine(StrPtr(sCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function我在程序里用来加载窗体用的,就是给出窗体的名字,根据名字来动态加载已经存在但是尚未成为实例的窗体,比如这样:
ELine("Frm1.Show")问题在于调试环境中可以正常运行,但是编译之后,就会报错,找不到VBA6.dll,后来我copy这个文件到system32目录下面,又报错某某内存不能为读,我怀疑是不是没有正常注册,用regsvr32 vba6.dll进行注册,报告:“已加载vba6.dll,但没有找到DllRegisterServer输入点,无法注册这个文件。”然而根据窗体名字来动态加载窗体是我整个程序的运行基础啊,总不能让客户挂着VB的开发环境来用吧?各位大侠,如何解决这个问题?或者可以实现同样效果的方式也可以!
我在本机上运行通过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
Private Sub Combo1_Click()
Text1 = Combo1.Text
End Sub
Private Sub Command1_Click()
Dim res As Boolean
res = ExecuteLine(Text1.Text)
End Sub
Private Sub Form_Load()
Combo1.AddItem "Var = msgbox(" & Chr$(34) & "¿´µ½ÁË£¿ºÜºÃÓá£" & Chr$(34) & " & vbCrLf & " & Chr$(34) & "ÊÇ·ñ¼ÌÐøʵÑé?" & Chr$(34) & ", vbYesNo + vbInformation)" & ":" & "If var = vbNo Then End"
Combo1.AddItem "shell " & Chr$(34) & "calc.exe" & Chr$(34) & ",vbNormalFocus"
Combo1.AddItem "msgbox SecretFunction(2,2),vbInformation"
Combo1.AddItem "Form1.BackColor = vbRed"
Combo1.AddItem "var = 3^2 + sin(3.1415926/4):msgbox var"
Combo1.ListIndex = 0
End Sub
http://www.shadoware.de/vb/execute_string.html
回3661512(.Net):好像是德语的页面吧?实在无法看懂……我下载了页面上VB6的例子,同样也是只能在调试状态下运行,编译后还是报错。
我给你的地址上面有两个这个函数的示范,你下下来看看行不行,也可以试试编译成P-CODE看看
这个是英文的,不过我试了一下那个代码,也出现read错误,我在想会不会是系统本身不支持...
你换用vba5.dll的申明试试?
'首先引用 Microsoft Script Control
Private Sub Command1_Click()
Dim SC As New ScriptControl
SC.Language = "VBscript"
SC.AddObject "form2", Form2
SC.ExecuteStatement "form2.show"
Set SC = Nothing
End Sub
Dim frmTemp As Form
Set frmTemp = Forms.Add(strForm)
frmTemp.Show
Set ShowNamedForm = frmTemp
End Function
http://www.tek-tips.com/gviewthread.cfm/lev2/4/lev3/32/pid/711/qid/97332
Dim frmTemp As Form
Set frmTemp = Forms.Add(strForm)
frmTemp.Show
Set ShowNamedForm = frmTemp
End FunctionPrivate Sub Command1_Click()
ShowNamedForm Text1
End SubPrivate Sub Form_Load()
Text1 = "Form2"
End Sub
没有EbExecuteLine功能那么大,但是可以满足你的要求了
Forms 集合是一个集合,它的元素代表每一个在应用程序中加载的窗体。集合包括应用程序的 MDI 窗体,MDI 子窗体和非 MDI 窗体。Forms 集合只有一个属性 Count,指定集合中元素的数目。谢谢帮我解答的两位星星^_^