明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2898|回复: 12

关于VBA中窗体的奇怪问题

  [复制链接]
发表于 2003-10-31 15:02:00 | 显示全部楼层 |阅读模式
1、我用.show方法来显示窗体;
2、我用.hide方法来隐藏窗体,是否是关闭释放窗体?
3、我在一个窗体中给一个模块中定义的几个PUBLIC变量赋值,在调用.hide方法时,居然把这些变量的值全给清了,怎么回事?
发表于 2003-10-31 18:42:00 | 显示全部楼层
Hide只是隐藏窗体,并不会释放窗体。
应该是程序中其它地方出现问题,自己使用单步调试一下。
 楼主| 发表于 2003-11-1 22:21:00 | 显示全部楼层
怪就怪在这里,如果我不使用.hide而是点击窗体右上角的叉叉,PUBLIC变量就还有值,一但使用了.hide,仅仅使用了.hide,其他一模一样,结果所有的PUBLIC变量值就空了;
发表于 2003-11-1 22:46:00 | 显示全部楼层
你每个带窗体的程序都这样吗?
发表于 2003-11-1 23:44:00 | 显示全部楼层
检查一下可能清空这些变量值的语句!
 楼主| 发表于 2003-11-2 14:20:00 | 显示全部楼层
即使我写了.hide,比如放一个按钮,然后在按钮的点击事件里写.hide,但是,只要我不点击这个按钮,而是点击右上角的叉叉,就不会把变量清空,只是点了按钮,也就是执行了.hide才出怪事的;
每个窗体,只要用了.hide就出鬼,其他关于变量的语句即使一句也没有也是这样,见鬼了,高手帮忙捉鬼啊。
发表于 2003-11-2 15:08:00 | 显示全部楼层
你用以下程序试试你的运行结果是否和我一样:
窗体userform1代码:
  1. Private Sub CommandButton1_Click()
  2. Debug.Print "HIDE前mccad的值为:" & mccad
  3. Debug.Print "HIDE前mjtd 的值为:" & mjtd
  4. Me.Hide
  5. Debug.Print "HIDE后mccad的值为:" & mccad
  6. Debug.Print "HIDE后mjtd 的值为:" & mjtd
  7. Unload Me
  8. Debug.Print "卸后mccad的值为:" & mccad
  9. Debug.Print "卸后mjtd 的值为:" & mjtd
  10. End Sub

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

  18. End Sub


模块1代码:
  1. Public mccad As String
  2. Public mjtd As String
复制代码


这是我的运行结果:
  1. 未设置前mccad的值为:
  2. 未设置前mjtd 的值为:
  3. 打开窗体初始化后mccad的值为:www.mccad.net
  4. 打开窗体初始化后mjtd 的值为:www.mjtd.com
  5. HIDE前mccad的值为:www.mccad.net
  6. HIDE前mjtd 的值为:www.mjtd.com
  7. HIDE后mccad的值为:www.mccad.net
  8. HIDE后mjtd 的值为:www.mjtd.com
  9. HIDE前mccad的值为:www.mccad.net
  10. HIDE前mjtd 的值为:www.mjtd.com
  11. HIDE后mccad的值为:www.mccad.net
  12. HIDE后mjtd 的值为:www.mjtd.com
  13. 卸后mccad的值为:www.mccad.net
  14. 卸后mjtd 的值为:www.mjtd.com
复制代码
 楼主| 发表于 2003-11-2 19:59:00 | 显示全部楼层
首先感谢,请您试试将.hide后面的内容放到一个新的模块中一个新的宏中,在.hide后,手动运行新模块的新宏,看看结果;

我忘了说了,我曾经试过,在.hide后直接跟其他模块的任何宏(就是在.hide后面写call module1.test(例))结果是变量值存在,但是分开运行就不对了;
发表于 2003-11-2 20:32:00 | 显示全部楼层
那就是你软件的问题了,我的正常。
我增加了一个 模块2
在其中写上:
  1. Sub GetStr()
  2. Debug.Print "其它过程中mccad的值为:" & mccad
  3. Debug.Print "其它过程中mjtd 的值为:" & mjtd
  4. End Sub

然后分别在窗体的初始化及按钮的点击事件中增加
Call GetStr
行,最后的结果是:
  1. 未设置前mccad的值为:
  2. 未设置前mjtd 的值为:
  3. 打开窗体初始化后mccad的值为:www.mccad.net
  4. 打开窗体初始化后mjtd 的值为:www.mjtd.com
  5. 其它过程中mccad的值为:www.mccad.net
  6. 其它过程中mjtd 的值为:www.mjtd.com
  7. HIDE前mccad的值为:www.mccad.net
  8. HIDE前mjtd 的值为:www.mjtd.com
  9. HIDE后mccad的值为:www.mccad.net
  10. HIDE后mjtd 的值为:www.mjtd.com
  11. 卸后mccad的值为:www.mccad.net
  12. 卸后mjtd 的值为:www.mjtd.com
  13. 其它过程中mccad的值为:www.mccad.net
  14. 其它过程中mjtd 的值为:www.mjtd.com
复制代码
 楼主| 发表于 2003-11-3 08:57:00 | 显示全部楼层
先执行窗体所包含的所有宏,例如设置变量,然后.hide;
然后工作结束,回到VBA界面,再用F8或者执行你写的GETSTR,也就是单独执行,不要让窗体调GETSTR,再看看结果;

非常谢谢;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-28 12:44 , Processed in 0.207325 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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