vba 修改文本文档 指定行_VBA程序报错,用调试三法宝,bug不存在的

b6e233c244a000fabc19d66040537b9e.png

如果把VBA比作一门刀法,那么经过前面内容的操练,大家已经掌握了很多实用的招式。

如果我们在刀法招式的基础之上,再掌握更多的“磨刀”心法,那么我们的刀用起来才会又好又快。

所以今天主要和大家分享——VBA“磨刀”心法之程序调试,这也是《Excel VBA:办公自动化》系列教程的第7节。

1.认识VBA:什么是VBA?

2.这些掌握了,你才敢说自己懂VBA

3.VBA变量5年踩坑吐血精华总结

4.VBA中重要的强制申明,谁看谁明白

5.VBA掌握循环结构,包你效率提高500倍

6.精通VBA分支结构,少写程序100行

7554cf5968cd3d1658aebc85d6c63801.png

1.什么是程序调试?

所谓的程序调试就是:在某个计算机程序正式投入使用之前,利用一些工具或方法找出程序的漏洞或错误,从而保证该程序能够正常运行不出错。

这样说,好像仍然不是很明白。我们举个例子,帮助大家更好消化。

案例:根据左侧「C列」富豪榜的身价数据,利用右侧「G列」的判断标准,将判断后的「富豪尊称」填入「D列」

ff034f465427e340349cabc5aa3a00ae.png

在正式分享上述案例之前,先插播一条关于美化宏按钮的信息。

有朋友私信问我:猴子,我的那个「宏按钮」实在是太丑了,我看你设置的就挺好看,应该如何设置呢?

我觉得这位同学很有眼光,既然你已经发现了我的审美,那么也不隐藏了,都分享给你们了。

通常情况下,我们都是按照「开发工具」-「插入」-「表单控件」-「按钮(窗体控件)」这样的路径来绘制我们的「宏按钮」

0f7b5f5ede63627a1c0a3c280e79246c.png

这样绘制的「宏按钮」,简直是巨丑无比,哪能入我猴子的法眼?

ff30ad13f453ea190a35623b5724ae41.png

一对比上图,很明显左侧的宏按钮颜值更高。

就像同样多金的2个男人,要是我,肯定选择更帅的那个,不是吗?

那么,左侧颜值更高的宏按钮如何设置呢?

经过我多年不眠不休的潜心研究,终于,研制出提升宏按钮颜值的方案:

首先,我们点选Excel选项卡中的「插入」-「形状」-「矩形」-「圆角矩形」

6ffa99a065a90352c8447c29cbdfccd0.png

然后,直接拖动绘制就好,绘制完成后,Excel会自动多一个「格式」的选项卡。这个选项卡有很多可以自定义这个圆角矩形的操作,比如:颜色、阴影、大小等,大家根据自己的喜好修改就行。

4aeb0f5526edda3b0aa9205be2b5e40d.png

大家可能还有个疑问,宏按钮确实好看了,可是怎么让它关联宏呢?

纳尼?这能难倒我万能的猴子,又经过数十年的研究,天台式微笑又一次上扬在我的嘴角:

其实,和插入VBA那个巨丑无比的「按钮(窗体控件)」关联宏的操作一样。

我们「鼠标右击」-「指定宏」,然后从「指定宏」列表选择自己需要关联的宏即可。

7e7b6b52da82b3154fb76a202767b8c7.png

「宏美化」探讨完毕,我们继续回到上面的案例。

2.VBA程序如何调试?

我们根据上述案例的特点,并结合之前For循环结构和IF分支结构的2个知识点,首先将这个案例的代码写完(大家肯定都会写,我就直接展示了)。

29a41689ce09f0ee72138fef8c904393.png

运行程序,看下结果

e3006524eb994446deb2f6c8c0ad9595.png

这什么鬼,VBA你这又来侮辱我的智商吗?

不过,俗话说:调试用的好,快乐没烦恼。

因此,我们要用VBA的调试功能,解除VBA侮辱我们智商的烦恼。

(1)我们首次先打开VBA编辑器

8efaed700f6a19cb283c35e665c5067c.png

(2)鼠标点选「断点」位置

77a4eb9b06032fc291d517dad1062dcb.png

比如,我们在「For i = 3 To 12」处设置「断点」,那么我只需要将鼠标挪至每行代码前的「灰色框体」上,然后轻轻点击「鼠标左键」,该位置会出现一个

f37245bba0f798d3c59f1c9092e4899a.png

,并且该句代码会被批色

029b65e148793b4b08b7631668ea4f35.png

,表明「断点」设置成功。

所谓「断点」就是当VBA遇到手动设置的「断点」,运行中的程序将会自动停止,并「批黄断点处代码」,等待下一步执行指令。

套用到这个案例就是,我点击程序自动运行后,当程序执行到「For i = 3 To 12」这句话时,就会自动停止,且批黄该句代码,等待我的下一条指令。

389eeb5b7627cad18fc38c4745958a5d.png

(3)「单步调试」查找错误出处

此时为了找到程序程序出错的位置和原因,我们需要使用「单步调试」,也就是一句句执行,查看每行代码执行情况,更加精准的排查错误。

在VBA编辑器中,依次点选「调试」-「逐语句」,当然最高效的方法是使用快捷键「F8」

e121eb2f49aef4ee872e086c0f59e130.png

(4)鼠标悬停变量处,自动显示当前变量的值

在代码过程中,我们将鼠标悬停在变量上,VBA编辑器将自动提示当前变量的取值,比如:图中的鼠标悬停在「变量i」上,下方会自动显示当前「i = 3」

a4822836e3c7390a68ee3d6a43e62fcc.png

有些小伙伴,可能说,猴子这个悬停显示变量值的功能确实很贴心,你讲解的这个案例,只有一个变量,悬停很easy。如果我的代码中有很多个变量,我要查看多个变量的值,那岂不是...想想都头皮发麻呢。

一听就知道,心中有这样疑问的同学,绝对是“懒中王者”,妥妥的未来科技界领头羊。

所以,接下来,猴子就再给你介绍个“懒人”VBA调试法宝。

(4)「添加监控」让VBA调试更贴心

我们在VBA选项卡依次点选「调试」-「添加监控」

fcc92ed990b81d279e440bd737f39b8b.png

在弹出的「添加监控」的表达式填写需要监视的内容即可,然后点击右侧「确定」按钮,比如:本案例中需要监控「变量i」的值变化,在「表达式」文本框填入「i」,然后点击「确定」

e1a946c01ac0b02eb9b008de95921c6a.png

然后,我们就可以看到在VBA编辑前底部会生成一个名为「监视窗口」的窗体,上面显示了监控的相关内容。比如监控的是什么,当前监控内容的值;监控内容的类型,相关内容大家在实操后,自行探索查看即可

02bdf193d2cba8db125a9fe572f027b3.png

(5)综合利用上述调试功能,快速查找代码出错原因

当我们将上述代码一行行执行,在「i = 9」发现,根据分类方法「C9 = 934」属于二级分类,「单元格D9」显示的应该是「富豪」,而不是现在错误的「超级富豪」

d1f25510899627e6476b2fcfb84b50d8.png

然后,我们就聚焦在这行代码上,检查问题。果然是将单元格的判断值条件写错了,才导致了这次的翻车事件~

f12483814e0c53c8651caaac7242484c.png

然后,修改代码后,发现代码执行结果正常。

2f0b6db3db448118393d48d27eaf2240.png

3.总结

以上就是,我们利用VBA代码调试的功能,实现了定位错误代码、找出原因错误原因、修改错误代码,最后成功执行获得正确结果的全部流程。

通过这个案例,介绍了VBA三大调试法宝。

(1)设置断点

在需要停止的位置手动设置「断点」,程序运行此处批色显示且暂停执行,等待下一步指令。

(2)单步调试

单步调试实现程序逐句执行,快速定位错误代码位置,便于及时排查错误。

(3)添加监视

实时监控需要关注的变量或内容,精准定位错误原因。

同时,还与大家分享了,通过「插入形状」美化宏按钮颜值的小技巧,让你的代码实用的同时,也增加了爆表的颜值。

毕竟,多金又帅的小哥哥谁不喜欢呢?

e9d776b8a2b2773950e628b3ff183899.png

推荐:人工智能时代,你必须要学会这个通用技能

6dac958b81c6072b048c2c69ab24175e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mqtt协议详解_IoT物联网设备上云技术方案详解

随着传感器和通信技术的不断发展,物联网行业方兴未艾,业务链路涉及数据采集,通信连接,数据存储,数据可视化,洞察,行动决策。但,在实施过程中,碎片化的设备端通信连接难题…

【转】基于WebSocketSharp 的IM 简单实现

websocket-sharp 是一个websocket的C#实现,支持.net 3.5及以上来开发服务端或者客户端。本文主要介绍用websocket-sharp来做服务端、JavaScript做客户端来实现一个简单的IM。 WebSocketBehavior WebSocketBehavior是核心对象,他包含了OnOpen,OnMessage…

【转】极限编程一览

极限编程(XP)起源始于1990年代。当时肯特布莱克(Kent Black)在戴姆勒克莱斯勒(DaimlerChrysler)处理项目时,试图寻找一种更好的软件开发方法。他的创立新方法后来被称为极限编程方法论&#xff…

mysql 关联更新_跳出初学MySQL知识的原理整理(一)

一、基础架构MySQL 可以分为 Server 层和存储引擎层两部分。Server 层包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。而存储引擎层负责数据的存储和提取。支持 InnoDB、MyISAM等多…

【转】TcpListener和tcpclient使用

前段时间公司项目中遇着需要做文件的远程传输,场景是用户通过网页选择一些文件,然后提交请求到服务器,同时把请求标识传递给本机的TCP文件传输端;服务器收到请求后在服务器端创建任务生成保存文件的路径同时通知文件传输端开始传文…

sleep期间读取所有_ceph部分数据所有副本先后故障的抢救

半天河网易游戏高级运维工程师,主要负责云存储的运维;一个既希望跟业务聊又喜欢能够默默在后面忙活的普通运维人。背景故障现场故障恢复故障恢复分析第一种方式:物理磁盘对拷第二种方式:服务启动时跳过故障扇区来避免异常退出解决…

【转】有限状态机用法教程

如博文无法正常显示,请访问原文地址: https://blog.csdn.net/ChinarCSDN/article/details/82263126 有限状态机用法教程 文章目录 有限状态机用法教程 [toc]1Finite-state machine —— 有限状态机2Foreword —— 前言()3Example —— 示例4Moltimode —…

通用usb集线器驱动_多口充电、高速传输——ORICO晶锐系列7口集线器测评

随着笔电越来越薄,机身接口数量越来越少,U盘、存储卡、移动硬盘、鼠标、蓝牙适配器等明显感觉无处可插,因此USB集线器就成为笔电的最佳拍档。近期,ORICO(奥睿科)推出了一款晶锐系列7口集线器产品,它集成了7个USB3.0接口…

【转】状态机思路在程序设计中的应用

状态机思路在单片机程序设计中的应用 状态机的概念 状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。 比如说一个按键命令解析程序,就可以被看做状态机:本…

【转】超详细的UML状态图符号,初学者也能轻松看懂状态图

UML状态图,用于显示状态机,即描述一个对象所处的可能状态以及状态之间的转移。用状态图建模可以帮助开发人员分析复杂对象的各种状态的转换,以及对象何时执行怎样的动作。那状态图又是怎样表示这些信息的呢?要想看明白其中的奥妙&…

舒尔特注意力训练表格_舒尔特注意力训练,舒尔特方格练习入口

孩子的注意力是否集中,直接影响孩子的上课效率和作业正确率,最终影响学习成绩。道理大家都懂,关键是如何保证注意力的集中。接下来,我给大家推荐一个简单方便在家就能完成的训练方法,把它比作小游戏也不为过。那就是舒…

nginx文件系统大小_Nginx 了解一下?

这篇文章主要简单的介绍下 Nginx 的相关知识,主要包括以下几部分内容:Nginx 适用于哪些场景?为什么会出现 Nginx?Nginx 优点Nginx 的编译与配置Nginx 适用于哪些场景?如图所示,一个请求会先经过 Nginx 到达…

存储过程排版工具_安利一款比Evernote更为实用的云笔记工具,不容错过

作为一个爱分享的自媒体人,出于工作和兴趣前前后后接触到的云笔记工具很多,例如:有道云笔记、为知笔记、语雀、印象笔记、oneNote...在笔记工具的使用上还是略有点点心得,今天给大家分享一款实用的云笔记工具——Baklib&#xff0…

【转】有限状态机(FSM)学习总结C#

FSM(Finite State Machine有限状态机)可以理解成是对行为逻辑的抽象,就好象人在生活中会做出各种行为,例如吃饭、睡觉等,这些所有我们都看作是“行为”的分支,由大脑决定每种行为具体是什么实施。在整个FSM…

【转】[完全免费] 在线UML Sequence Diagram 时序图工具 - 教程第3部分

时序图教程 甲序列图描述了一组对象之间的相互作用参与协作(或情况),布置成按时间顺序; 它通过它们的“生命线”和它们发送给对方的消息来显示参与交互的对象。 什么是UML中的序列图? UML序列图是详细说明如何执行操作的交互图。…

【转】[完全免费] 在线UML Class Diagram 类图工具 - 教程第1部分

在线Visual Paradigm - UML编辑器 使用在线UML编辑器轻松绘制UML图,其中包含功能强大的UML编辑工具,即时UML语法检查和整洁的用户界面。Visual Paradigm在线UML 图,如类,用例,序列,活动,部署&a…

python 定时器_python 线程之四:定时器(Timer),非阻塞

线程之一讲了线程,如果不熟悉,可以点击【线程之一:线程的创建、启动及运行方式】1、定时器实质:Timer 定时器源码实现,和我们自定义一个线程方式一样,都是继承了 Thread 类,重写了 run() 方法&a…

人如何认知事物?

自然界是连续的,人类将自然界离散化成一个个独立的概念,独立的概念相互关联,形成模型,随着模型的完善,模型会不断逼近真实事物。 比如人类创造了各种学科,就是从不同的方面深入研究世界的结果。 所以&…

域内定位个人PC的三种方式(1)

会话搜集 在cmd下调用query session命令可以获得当前环境下的windows会话 NetSessionEnum 这个函数不允许直接查询是谁登陆,但是它允许查询是谁在访问此工作站的网络资源时所创建的网络会话,从而知道来自何处,此函数不需要高权限即可查询 第…

02.Teams组成概述及使用分享

在上一篇博客中介绍了Teams的前世今生,大家对Teams已经有了一个初步的认识,但是如上一篇文章中所说Teams是一个集成度很高的云协作平台,具体应该怎么去有效的利用起来呢?接下来这篇博客给大家全方位的分享一下Teams的组成部分以及…