条件编译,官方文档:
代码语言:javascript复制#If...Then...#Else 指令
有条件地编译选定的 Visual Basic 代码块
条件编译通常用于为不同平台编译相同的程序。
它还用于防止调试代码出现在可执行文件中。
在条件编译期间排除的代码将在最终的可执行文件中完全省略,因此它不影响大小或性能。
使用场景一
为了兼容64和32的Excel VBA,在声明API的时候我们一般会用到条件编译:
代码语言:javascript复制#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来调试就很麻烦了。
而条件编译就能够很好的解决这个问题,在需要调试的地方插入这种形式的调试代码:
代码语言:javascript复制 #If 条件编译 Then
Debug.Print "执行条件编译"
#End If
同时在这个模块的顶部声明条件编译常量:
代码语言:javascript复制#Const 条件编译 = 1
这个条件编译常量就是一个开关,设置为0或者直接注释掉(注释掉也不会报错),所有使用了这个条件编译常量的条件编译代码都不会执行,反之就执行需要的调试代码。
这样就使用一个开关就控制了各个Sub、Function内部的调试代码,而且官方文档也说明了,这种代码是在条件编译期间排除的代码将在最终的可执行文件中完全省略,因此它不影响大小或性能。