ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 代码写在Thisworkbook和标准模块的错误处理机制为什么不同?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-24 11:08 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 小小道童 于 2023-7-24 15:36 编辑

有些错误提示在Thisworkbook里面不会显示 调试 按钮,但是在标准模块中就会显示,大家知道这个是什么原因吗?



经过大家的帮忙,问题已解决了,总结下来:
1、没有特殊需要,代码统一写到标准模块中,可以对所有错误显示“调试”按钮,方便定位错误
2、需要在wb和sht中写事件的,代码写到标准模块中,然后通过call 调用代码
3、代码已经写在wb或sht中,某种原因不能使用标准模块的,对于无法显示
“调试”按钮的错误,可按下图操作,副作用是即使使用了on error resume next也会报错,所以建议找到错误后,将设置复原
image.png
4、多说一句,上图中的第2个选项,经测试作用是如果使用了类模块中的代码,当类代码中出错后可以直接定位至类中的代码位置,其他2个选项无此功能,适合使用自定义类代码的情况
image.png image.png

TA的精华主题

TA的得分主题

发表于 2023-7-24 11:34 | 显示全部楼层
不明原因。感觉标准模块是个贵宾室,享受不一样的服务。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-24 11:43 | 显示全部楼层
山菊花 发表于 2023-7-24 11:34
不明原因。感觉标准模块是个贵宾室,享受不一样的服务。

因为平时都在Thisworkbook里面写代码,导致有些错误不能显示调试按钮就没办法快速定位到错误,一直以为是vba自身的处理机制,后面才发现放到标准模块下可以显示,或者写到Thisworkbook中同时将工具选项中的【错误捕获】选项改为 【发生错误则中断】也可以,但是选择这个后使用on error resume next 后也会报错,所以还是有点副作用,最后找了个折中的办法 通过 on error goto ErrorHandle来捕捉所有错误在定位,但是还是麻烦了点,真是想不通为什么这么设计,毕竟有时候为了使用 事件功能,只能写到Thisworkbook或者sheet中

TA的精华主题

TA的得分主题

发表于 2023-7-24 11:55 | 显示全部楼层
小小道童 发表于 2023-7-24 11:43
因为平时都在Thisworkbook里面写代码,导致有些错误不能显示调试按钮就没办法快速定位到错误,一直以为是 ...

说明你对对象不熟悉,也不了解什么是面向对象编程!这些基础的概念性的东西,不清楚,不理解,所以就会有这些个迷茫!还有,代码通常是写在标准模块中或者类模块中;worksheet里或者thisworkbook里的代码通常只调用标准模块的功能!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-24 12:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
WANT-T 发表于 2023-7-24 11:55
说明你对对象不熟悉,也不了解什么是面向对象编程!这些基础的概念性的东西,不清楚,不理解,所以就会有 ...

那事件代码,你总不能也写到标准模块中吧。。。

TA的精华主题

TA的得分主题

发表于 2023-7-24 12:03 | 显示全部楼层
小小道童 发表于 2023-7-24 12:00
那事件代码,你总不能也写到标准模块中吧。。。

铁子,你这是抬杠呀,事件可以写在类模块中,但是你会用嘛?

TA的精华主题

TA的得分主题

发表于 2023-7-24 12:23 | 显示全部楼层
小小道童 发表于 2023-7-24 12:00
那事件代码,你总不能也写到标准模块中吧。。。

事件只需要有留一个监听的口即可,具体实现代码调用标准模块的过程
至于你说这个原因,我估计sh和wb模块以及一些控件,部分语句都是不能中断的

TA的精华主题

TA的得分主题

发表于 2023-7-24 12:30 | 显示全部楼层
本帖最后由 micch 于 2023-7-24 12:32 编辑

应该属于微软的问题,一般来说,能换个方式规避的问题就不研究为什么那样做不行,毕竟都是为了解决需求,而不是研究为什么微软的对象是怎么设计的。

建议事件只保留触发语句,功能单独写过程调用。就能调试了。大不了,代码做完后再复制到thisworkbook对象中,正确的代码不报错,也就不需要考虑有没有调试了

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-24 13:18 | 显示全部楼层
morpheus126 发表于 2023-7-24 12:23
事件只需要有留一个监听的口即可,具体实现代码调用标准模块的过程
至于你说这个原因,我估计sh和wb模块 ...

嗯嗯,明白了,是个办法,看来以后都写在标准模块里面吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-24 15:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
WANT-T 发表于 2023-7-24 12:03
铁子,你这是抬杠呀,事件可以写在类模块中,但是你会用嘛?

会。。但是你平时写个简单的代码,workbook里面能实现的,你非要搞复杂在类里面弄一下吗。。。你这跑题了啊,我问的是 为什么他们2个对错误的处理方式不一样,你这直接 巴拉巴拉 一堆没用的废话。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 07:49 , Processed in 0.033650 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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