ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7251|回复: 12

[讨论] 在VBA中使用InputBox会引起GDI泄露,微软Bug?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-4-11 00:54 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:VBA函数
今天花了很长时间修正我的VBA版打气球游戏(已发“原创下载”版),原因是游戏结束后GDI对象的个数不能回归游戏开始前的数值,调试了一晚上,终于发现问题居然出在InputBox语句中,通过以下实验,证实了我的想法:
1。新建一个空白工作表,进入VB编辑器,新建一个空白窗体,加入以下代码:
Private Sub UserForm_Click()
    InputBox ""
End Sub
2。按Ctrl + Shift + ESC打开任务管理器,转到“进程”,从“查看-选择列”中选中“GDI对象”
3。运行窗体,记下当前Excel进程的GDI对象数目,在UserForm上点击,然后在弹出的InputBox中点确定或取消,可以看到Excel进程的GDI对象数目增加了1,重复N次,GDI对象数目增加N,一直不会释放,即使关闭UserForm窗体,Excel进程的GDI对象也比未打开窗体之前增加了N
4。更过分一点,使用下列代码:
Private Sub UserForm_Click()
    For i = 1 To 300
        InputBox ""
    Next
End Sub
记住Excel进程的GDI对象数目,按F5运行窗体,在窗体上点击一下以后一直按ESC不松手,待所有Inputbox全部关闭以后,关闭窗体,可以看到Excel进程的GDI对象数量增加了300。
这是微软的Bug还是我电脑的问题?在网上没有搜到相关解释,请各位帮我测试一下。
在此还要提醒各位,事情没弄清之前尽量使用Application.InputBox来代替InputBox,因为前者没有发现此问题

TA的精华主题

TA的得分主题

发表于 2009-5-22 07:03 | 显示全部楼层
这个问题有点高深,以致无其它人回应。所谓“高处不胜寒”啊!

TA的精华主题

TA的得分主题

发表于 2009-6-17 08:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我在窗体和工作表中都试过,结果同你的一样
Application.InputBox 执行增加3个,退出释放3个
InputBox 执行增加2个,退出只释放1个。所以每执行一次就会增加1个GDI 对象。
资源泄漏耶。
默认GDI对象10000个,2000版可以设置到16K,2003版可以设置到64K,当程序创建的GDI对象数达到设定值之后界面就会混乱。

TA的精华主题

TA的得分主题

发表于 2009-6-17 08:15 | 显示全部楼层
原帖由 fdd 于 2009-5-22 07:03 发表
这个问题有点高深,以致无其它人回应。所谓“高处不胜寒”啊!

看你话说的,你应该说“曲高和寡”

TA的精华主题

TA的得分主题

发表于 2009-6-17 08:18 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-6-17 08:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 Scarlett_88 于 2009-6-17 08:15 发表

看你话说的,你应该说“曲高和寡”


我说的与你说的是两面。

TA的精华主题

TA的得分主题

发表于 2009-11-2 11:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
GDI对象的个数为1W应是指所有的总量吧?
但分到EXCEL中可能就没有这个数了

还有就是如楼主所说,其实我们自己写的好多程序,都会使GDI上升而回复不了

这种情况该如何处理才好呢?

TA的精华主题

TA的得分主题

发表于 2009-11-2 16:07 | 显示全部楼层
高深的题目,我等仰而观止。

TA的精华主题

TA的得分主题

发表于 2013-11-20 11:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-6-25 21:52 | 显示全部楼层
看到帖子最后了,不知所云。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-19 08:40 , Processed in 0.045923 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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