问:在Excel VBA中怎实现调用函数时,由函数显示窗体,结束后由函数返回窗体产生值?

我想写个函数:SelectMaterialCode()
调用函数后,会查询相关条件(我己决解)。
查询条件如果不止一条的话,显示自定义窗体让用户选数据。
然后把用户选择结果从函数中返回。
就像是 Msgbox 和 InputBox 那样的效果。
目前我是通过在模块中定义函数和作接口用的全局变量。
但是这个方法会暴露接口,因接口只有一个导致不能产生多个实例。
我想过把接口变量定义在类模块中,那样的话还是会产生两个模块啊。
有没有更好的方法?
我把问题总结一下吧:
一、如何能将函数和窗体封装在一起。
二、如果函数和窗体不能在同一模块,那窗体产生的数据如何传到函数内部,再由函数返回该值。

函数
查询条件数量判定(if):
=1 直接执行函数
》1 调用自己插入窗体(包含下拉框),窗体内部包含相应的函数,确认选择后执行相应的函数就可以;

如果符合的话,请采纳;如有疑问,Q64581397,或Em:zzhiling@qq.com追问

对,我就是想把这一功能封装成一个函数。
因为我想把这一功能写到加载宏中去。
有可能会同时产生多个实例。

追答

嘿嘿,你都说对了 ,也不采纳一下 ^_^

追问

我想问的是,函数和窗体之间数据怎么传?能不能封装到一个类里?或都调用函数直接写到窗体模块中等等。
行不行

追答

不用传递啊 包括结果直接在 窗体里面运行就好了啊

追问

这个函数我打算放到加载宏里的,单元格公式里用的。

追答

比如窗体名字是 userform1
在里面建立一个函数是
function test(a,b)
test = a*b
end function

那么你在窗体外面的模块1里面有宏比如
sub test1()
a1=1
a2=2
a3 = userform1.test(a1,a2)
end sub

这样就可以了 a3 就是传递过来的值;也就是 1*2 结果也就是 a3 = 2

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-17
在公共模块中定义一个全局变量,在公共模块中写Function过程,在过程语句中包含入对一个窗体的show,在窗体模块的退出过程中对这个全局变量进行赋值,最后把全局变量的值赋给自定义函数,再把全局变量的值清除。来自:求助得到的回答
第1个回答  2013-02-17
什么是由函数显示窗体?追问

像是调用函数:

value=InputBox("Some Message")

这种函数,可以自行弹出窗口。
用户在窗口中输了值,会经函数返回给 value 变量。

我想要的就是这种效果。

相似回答