设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 4523|回复: 9
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2009-9-1 14:33:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 djt 于 2009-9-1 15:47 编辑


比如说这样一个函数
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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-9-1 14:40: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

把上面代码放到模块
3#
 楼主| 发表于 2009-9-1 14:45:45 | 只看该作者
public没有关系
4#
发表于 2009-9-1 15:04:49 | 只看该作者
返回的值类型不受支持当然不能用了.
5#
 楼主| 发表于 2009-9-1 15:06:38 | 只看该作者
本帖最后由 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里执行没问题,在控件就提示找不到函数
6#
发表于 2009-9-1 15:34:36 | 只看该作者
没懂你在怎么做,也不知你把它放在控件的哪个属性里执行,退一步海阔天空,你把该函数放到VBA里执行就行了.
7#
 楼主| 发表于 2009-9-1 15:43:46 | 只看该作者
放例子
8#
发表于 2009-9-1 16:05:01 | 只看该作者
本帖最后由 koutx 于 2009-9-1 16:11 编辑

窗体的Click事件执行一个过程(包括Sub过程及Function过程)或一个宏,而执行的实施是靠Click事件中的VBA语句,或在相应宏中的设定。
9#
 楼主| 发表于 2009-9-1 16:09:02 | 只看该作者
本帖最后由 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
10#
发表于 2009-9-1 17:21:47 | 只看该作者
这个问题本身可以直接绕过,直接用"100"字符做参数,而将函数并入一起,窗体的代码应该还简单一点,可能ACCESS的解释执行的规则就是这样,没必要研究太深,就象在ACCESS里的查询,有一些比较复杂的查询如用docmd.runsql SQL字符相同却会得到不相同的结果.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-19 16:34 , Processed in 0.091251 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表