前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA使用条件编译更好的调试代码

VBA使用条件编译更好的调试代码

作者头像
xyj
发布2021-04-09 14:25:10
9230
发布2021-04-09 14:25:10
举报
文章被收录于专栏:VBA 学习VBA 学习VBA 学习

条件编译,官方文档:

#If...Then...#Else 指令
有条件地编译选定的 Visual Basic 代码块

条件编译通常用于为不同平台编译相同的程序。
 它还用于防止调试代码出现在可执行文件中。
 在条件编译期间排除的代码将在最终的可执行文件中完全省略,因此它不影响大小或性能。

使用场景一

为了兼容64和32的Excel VBA,在声明API的时候我们一般会用到条件编译:

#If Win64 Then
    Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
#Else
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If

使用场景二

平时写一些简单的VBA代码,偶尔有些小的错误,使用简单的Debug.Print就能够解决。

这种时候一般调试完成之后,再手动删除Debug.Print就可以,不会影响到程序的运行。

但是,如果程序复杂了,代码函数很多,分割的Sub、Function很多的话,在各个Sub、Function内部都可能出现Bug,这种时候如果还是使用Debug.Print的方式来调试的话,一旦程序写好了,要删除这些还挺麻烦。

而认为写好的程序可能还存在没有检查到的Bug,这种时候又要在各个Sub、Function内部重新写Debug.Print来调试就很麻烦了。

而条件编译就能够很好的解决这个问题,在需要调试的地方插入这种形式的调试代码:

    #If 条件编译 Then
        Debug.Print "执行条件编译"
    #End If

同时在这个模块的顶部声明条件编译常量:

#Const 条件编译 = 1

这个条件编译常量就是一个开关,设置为0或者直接注释掉(注释掉也不会报错),所有使用了这个条件编译常量的条件编译代码都不会执行,反之就执行需要的调试代码。

这样就使用一个开关就控制了各个Sub、Function内部的调试代码,而且官方文档也说明了,这种代码是在条件编译期间排除的代码将在最终的可执行文件中完全省略,因此它不影响大小或性能。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 VBA 学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用场景一
  • 使用场景二
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档