Matt__W 发表于 2008-12-19 11:01:16

形式到模块还是模块到形式?

从窗体中调用模块和从模块中调用窗体哪个更好?我总是不得不创建一个sub,它只不过是调用一个表单,收集我的数据,然后将其发送到另一个模块进行处理。昨天我开始思考,(可怕吧)为什么我需要2个subs,为什么没有1个调用表单,然后处理表单上的数据。
长话短说,我如何捕获表单上的取消按钮以退出调用sub?按钮已经卸载了我,但这只是转储表单内容,而不是退出调用sub。我想检查表单上数据框的值,但是如果用户填写了所有的框,然后单击cancel会怎么样呢?盒子里会有数据,所以它会继续尝试。我想我可以使用cancel按钮来清除一个数据框,然后检查它是否为零,并以这种方式转储。有什么建议吗?
**** Hidden Message *****

Matt__W 发表于 2008-12-19 11:07:25

在卸载我之后添加END怎么样?或者只是结束?或者退出潜艇?

Rogue 发表于 2008-12-19 11:12:06

结束后,卸载我做到了。我知道这一定很简单。谢谢马特

Keith™ 发表于 2008-12-19 11:13:04

不客气。: kewl:

Keith™ 发表于 2008-12-19 13:55:41

但是我们仍然没有回答最初的问题,是调用一个表单并传递给一个模块,还是让模块调用表单并接收结果

Keith™ 发表于 2008-12-29 12:39:13

我通常让模块驱动表单,其中一个原因是类似于您遇到的情况。(基本上,您希望从表单调用返回值或状态)
我使用一个全局变量,存储在代码模块中。无论该 Global 存储对窗体执行的计算结果,还是仅将 gIntCancel 的值设置为 1,您都可以在卸载 Global 变量之前从窗体代码中设置该变量的值。
然后,代码执行在调用代码模块中恢复,有条件地取决于 Global 变量现在设置为什么。
一点伪代码:
'----------------------------------
' 在代码模块中
全局 retCode as Integer
Sub Test ()
retCode =0
frmCalculate.Show
if retCode=1 then
frmContinueCalc.Show
else
exit sub
end if
End Sub

Keith™ 发表于 2008-12-29 14:25:26

我发现最好从模块调用表单。在VB中,您可以从Sub Main()调用您的主表单,因此我将从这里开始。
现在我们已经解决了这个问题...
在您的表单中,您还应该使用Query关闭以防止在用户使用控制框关闭表单时出现数据处理错误。
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = 0 Then Cancel = 1
Hide Me
End Sub

窗口将被隐藏,但表单和数据可以从模块中访问。
当然,您可以始终从表单中设置数据,因此您不再需要在隐藏表单后查询表单。
请记住在收集完所有数据后卸载表单。虽然VBA在这方面很宽容,但VB却不那么宽容。您很容易最终在后台运行多个应用程序,只要您不卸载它们。

Rogue 发表于 2008-12-30 10:22:09

谢啦
页: [1]
查看完整版本: 形式到模块还是模块到形式?