Office中国论坛/Access中国论坛

标题: 难呀,真难,返回值类型为“窗体”的模块函数在VBA可以调用,放到控件就不能调用 [打印本页]

作者: djt    时间: 2009-9-1 14:33
标题: 难呀,真难,返回值类型为“窗体”的模块函数在VBA可以调用,放到控件就不能调用
本帖最后由 djt 于 2009-9-1 15:47 编辑

[attach]39487[/attach]
比如说这样一个函数
FUNCTION GetParentForm(str as string) as Form
    dim frm as form
    for each frm in application.forms
        if frm.tag=str then
          set GetParentForm=frm
          exit for
       endif
   next
end function

这个函数可以在VBA调用,但是如果在窗体的按钮
按下属性输入=GetParentForm('100')则提示找不到函数
改成如下则能调用
FUNCTION GetParentForm(str as string) as string
    dim frm as form
    for each frm in application.forms
        if frm.tag=str then
          GetParentForm=frm.tag
          exit for
       endif
   next
end function
作者: andymark    时间: 2009-9-1 14:40
public FUNCTION GetParentForm(str as string) as Form
    dim frm as form
    for each frm in application.forms
        if frm.tag=str then
          set GetParentForm=frm
          exit for
       endif
   next
end function

把上面代码放到模块
作者: djt    时间: 2009-9-1 14:45
public没有关系
作者: liwen    时间: 2009-9-1 15:04
返回的值类型不受支持当然不能用了.
作者: djt    时间: 2009-9-1 15:06
本帖最后由 djt 于 2009-9-1 15:13 编辑

4# liwen
应该只能这样解释了,就是怪在在VBA中调用一点问题也没有?
为什么有这样的问题呢?
比如有A窗体,通过A窗体又打开B窗体,想在B窗体中通过函数给A窗体的某些控件赋值,通常做法是FORMS!A.text1=1,由于某种原因不能调用这种方法,必须用函数
fuzhi(frm as form)来做,fuzhi(getparentform('100')在VBA里执行没问题,在控件就提示找不到函数
作者: liwen    时间: 2009-9-1 15:34
没懂你在怎么做,也不知你把它放在控件的哪个属性里执行,退一步海阔天空,你把该函数放到VBA里执行就行了.
作者: djt    时间: 2009-9-1 15:43
放例子
作者: koutx    时间: 2009-9-1 16:05
本帖最后由 koutx 于 2009-9-1 16:11 编辑

窗体的Click事件执行一个过程(包括Sub过程及Function过程)或一个宏,而执行的实施是靠Click事件中的VBA语句,或在相应宏中的设定。
作者: djt    时间: 2009-9-1 16:09
本帖最后由 djt 于 2009-9-1 16:14 编辑

还是走变通的办法,继续使用forms(n)来做!
把返回值改为string则没问题
Function GetParentForm(str As String) As String
    Dim frm As Form
    For Each frm In Application.Forms
        If frm.Tag = str Then
           GetParentForm = frm.Tag
          Exit For
       End If
   Next
End Function
Function test1(frm As String)
    MsgBox frm
End Function
作者: liwen    时间: 2009-9-1 17:21
这个问题本身可以直接绕过,直接用"100"字符做参数,而将函数并入一起,窗体的代码应该还简单一点,可能ACCESS的解释执行的规则就是这样,没必要研究太深,就象在ACCESS里的查询,有一些比较复杂的查询如用docmd.runsql SQL字符相同却会得到不相同的结果.




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3