nlnc 发表于 2003-10-31 15:02:00

关于VBA中窗体的奇怪问题

1、我用.show方法来显示窗体;
2、我用.hide方法来隐藏窗体,是否是关闭释放窗体?
3、我在一个窗体中给一个模块中定义的几个PUBLIC变量赋值,在调用.hide方法时,居然把这些变量的值全给清了,怎么回事?

efan2000 发表于 2003-10-31 18:42:00

Hide只是隐藏窗体,并不会释放窗体。
应该是程序中其它地方出现问题,自己使用单步调试一下。

nlnc 发表于 2003-11-1 22:21:00

怪就怪在这里,如果我不使用.hide而是点击窗体右上角的叉叉,PUBLIC变量就还有值,一但使用了.hide,仅仅使用了.hide,其他一模一样,结果所有的PUBLIC变量值就空了;

mccad 发表于 2003-11-1 22:46:00

你每个带窗体的程序都这样吗?

myfreemind 发表于 2003-11-1 23:44:00

检查一下可能清空这些变量值的语句!

nlnc 发表于 2003-11-2 14:20:00

即使我写了.hide,比如放一个按钮,然后在按钮的点击事件里写.hide,但是,只要我不点击这个按钮,而是点击右上角的叉叉,就不会把变量清空,只是点了按钮,也就是执行了.hide才出怪事的;
每个窗体,只要用了.hide就出鬼,其他关于变量的语句即使一句也没有也是这样,见鬼了,高手帮忙捉鬼啊。

mccad 发表于 2003-11-2 15:08:00

你用以下程序试试你的运行结果是否和我一样:
窗体userform1代码:
Private Sub CommandButton1_Click()
Debug.Print "HIDE前mccad的值为:" & mccad
Debug.Print "HIDE前mjtd 的值为:" & mjtd
Me.Hide
Debug.Print "HIDE后mccad的值为:" & mccad
Debug.Print "HIDE后mjtd 的值为:" & mjtd
Unload Me
Debug.Print "卸后mccad的值为:" & mccad
Debug.Print "卸后mjtd 的值为:" & mjtd
End Sub

Private Sub UserForm_Initialize()
Debug.Print "未设置前mccad的值为:" & mccad
Debug.Print "未设置前mjtd 的值为:" & mjtd
mccad = "www.mccad.net"
mjtd = "www.mjtd.com"
Debug.Print "打开窗体初始化后mccad的值为:" & mccad
Debug.Print "打开窗体初始化后mjtd 的值为:" & mjtd

End Sub


模块1代码:
Public mccad As String
Public mjtd As String


这是我的运行结果:
未设置前mccad的值为:
未设置前mjtd 的值为:
打开窗体初始化后mccad的值为:www.mccad.net
打开窗体初始化后mjtd 的值为:www.mjtd.com
HIDE前mccad的值为:www.mccad.net
HIDE前mjtd 的值为:www.mjtd.com
HIDE后mccad的值为:www.mccad.net
HIDE后mjtd 的值为:www.mjtd.com
HIDE前mccad的值为:www.mccad.net
HIDE前mjtd 的值为:www.mjtd.com
HIDE后mccad的值为:www.mccad.net
HIDE后mjtd 的值为:www.mjtd.com
卸后mccad的值为:www.mccad.net
卸后mjtd 的值为:www.mjtd.com

nlnc 发表于 2003-11-2 19:59:00

首先感谢,请您试试将.hide后面的内容放到一个新的模块中一个新的宏中,在.hide后,手动运行新模块的新宏,看看结果;

我忘了说了,我曾经试过,在.hide后直接跟其他模块的任何宏(就是在.hide后面写call module1.test(例))结果是变量值存在,但是分开运行就不对了;

mccad 发表于 2003-11-2 20:32:00

那就是你软件的问题了,我的正常。
我增加了一个 模块2
在其中写上:
Sub GetStr()
Debug.Print "其它过程中mccad的值为:" & mccad
Debug.Print "其它过程中mjtd 的值为:" & mjtd
End Sub

然后分别在窗体的初始化及按钮的点击事件中增加
Call GetStr
行,最后的结果是:
未设置前mccad的值为:
未设置前mjtd 的值为:
打开窗体初始化后mccad的值为:www.mccad.net
打开窗体初始化后mjtd 的值为:www.mjtd.com
其它过程中mccad的值为:www.mccad.net
其它过程中mjtd 的值为:www.mjtd.com
HIDE前mccad的值为:www.mccad.net
HIDE前mjtd 的值为:www.mjtd.com
HIDE后mccad的值为:www.mccad.net
HIDE后mjtd 的值为:www.mjtd.com
卸后mccad的值为:www.mccad.net
卸后mjtd 的值为:www.mjtd.com
其它过程中mccad的值为:www.mccad.net
其它过程中mjtd 的值为:www.mjtd.com

nlnc 发表于 2003-11-3 08:57:00

先执行窗体所包含的所有宏,例如设置变量,然后.hide;
然后工作结束,回到VBA界面,再用F8或者执行你写的GETSTR,也就是单独执行,不要让窗体调GETSTR,再看看结果;

非常谢谢;
页: [1] 2
查看完整版本: 关于VBA中窗体的奇怪问题