Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

无效使用Me关键字/如何在VBA标准模块中引用控件所在的窗体名称?

鱼儿小鱼  发表于:2019-09-06 16:05:49  
复制

Public Function FuncDblClick()
     DoCmd.openform "frmChooseGeo"    '打开地址选择窗口     
     With Forms!frmChooseGeo

           !frmBeforeChoose = Me.Name    '把打开地址选择器窗口时的窗体名称传递到地址选择窗口的frmBeforeChoose控件,以便返回时使用
     End With
End Function

想把这个功能函数放在basRDFRef这个标准模块中,以便在需要选择地址的控件的双击事件中直接调用。

运行后出错:编译错误,无效使用Me关键字

系统的解释:

关键字Me可以出现在类模块中。不可以出现在标准模块中,因为标准模块不能代表对象。若从类模块中复制代码到标准模块,则必须用指定的对象或窗体名称来取代Me,以保持原来的引用。


请问用什么代码可以取代Me,才可以引用调用函数的控件所在的窗体名称?

 

Top
西出阳关无故人 发表于:2019-09-06 16:25:26

有很多方法,传递窗体名称的参数(byval frmname as string),或传递窗体(byval frm as form),或通过公共变量(在调用函数前给变量赋值,然后在函数中使用该变量的值)。...

用参数把窗体名传递过去,例如:

Public Function FuncDblClick(byval frmname as string)
     DoCmd.openform "frmChooseGeo"    '打开地址选择窗口     
     With Forms!frmChooseGeo

           !frmBeforeChoose = frmname     '把打开地址选择器窗口时的窗体名称传递到地址选择窗口的frmBeforeChoose控件,以便返回时使用
     End With
End Function



鱼儿小鱼 发表于:2019-09-06 17:15:59

刚才按您说的试验了几次,比如现在是 frmCompany_Edit窗体中的控件[FAddress],在控件的双击事件中

1,输入=FuncDblClick("frmCompany_Edit"),正常弹出

2,输入=FuncDblClick(Me.Name),则弹出以上错误提示窗口

问题仍然没有解决,您的解决方案相当于最早不传递参数的函数中,  !frmBeforeChoose = Me.Name 改成!frmBeforChoose="frmCompany_Edit",然后调用=FuncDblClick()

仍然是需要手动输入控件所在的窗体名称,而不是自动获取的


在类模块中Me.Name就可以了,

但标准模块不让用Me,哪个代码可以替代呢?


比如:frm公司信息 窗体中有[FAddress]控件

          frm员工信息 窗体中也有[FAddress]控件

          frm某某某 窗体中也有[FAddress]控件

有没有代码能够自动获取双击控件时所在的 窗体名称



鱼儿小鱼 发表于:2019-09-06 17:25:37

改成=FunDblClick(Form.Name),可以正常使用了。

      对比:最早在不传递参数的FunDblClick()函数中, !frmBeforeChoose = Me.Name 改成 !frmBeforChoose = Form.Name,会提示提示 变量未定义(指向Form)

谢谢 西出阳关无故人 老师



总记录:3篇  页次:1/1 9 1 :