Excel 快速切换到";PROD";及;发展";模式
我使用一些高级的自动宏开发VBA代码,这些宏在开发阶段执行“管道”和额外的调试。 但是,当我将文件发送给用户(PROD阶段)时,我希望所有这些都关闭 DEV和PROD之间的切换经常发生(git+devops方法) 在DEV和PROD之间实现快速“切换”的最佳/最优雅的方式是什么? 是的,我可以只使用一个全局常量isDebug(我在一些项目中使用过),但是它很繁重、不雅观而且容易出错(我不止一次忘记了“翻转”开关——正如我前面所说的,快速而敏捷的“几乎”CI/CD管道) 编辑 现在,我正在使用一个快速脏黑客(我不喜欢脏黑客)来检查Excel文件是否从路径中有我的登录名的位置运行。如果是-这意味着我正在处理文件。如果没有-其他人正在使用它,我们不需要任何调试模式。但是它很难看,我可以预见很多问题(例如,明天可能会有其他人开发这些VBA…因此调试代码必须重写)。在VBE goto Extras->VBA项目的属性中,输入编译参数,例如:Excel 快速切换到";PROD";及;发展";模式,excel,vba,ms-access,debugging,devops,Excel,Vba,Ms Access,Debugging,Devops,我使用一些高级的自动宏开发VBA代码,这些宏在开发阶段执行“管道”和额外的调试。 但是,当我将文件发送给用户(PROD阶段)时,我希望所有这些都关闭 DEV和PROD之间的切换经常发生(git+devops方法) 在DEV和PROD之间实现快速“切换”的最佳/最优雅的方式是什么? 是的,我可以只使用一个全局常量isDebug(我在一些项目中使用过),但是它很繁重、不雅观而且容易出错(我不止一次忘记了“翻转”开关——正如我前面所说的,快速而敏捷的“几乎”CI/CD管道) 编辑 现在,我正在使用一个
DEV_MODE = -1
对不起,德国截图 然后使用以下代码
Option Explicit
Sub test()
'the following #If is a compile condition
#If DEV_MODE Then
'this is only compiled in dev mode
Debug.Print "debug mode is on"
#Else
'this is only compiled in production mode
Debug.Print "debug mode is off"
#End If
End Sub
请注意,在VBA中,-1
为True
,0
为False
。切换编译参数DEV_MODE=-1
将在整个VBA项目中切换开发模式。在VBE goto Extras->VBA项目属性中,输入编译参数,例如:
DEV_MODE = -1
对不起,德国截图 然后使用以下代码
Option Explicit
Sub test()
'the following #If is a compile condition
#If DEV_MODE Then
'this is only compiled in dev mode
Debug.Print "debug mode is on"
#Else
'this is only compiled in production mode
Debug.Print "debug mode is off"
#End If
End Sub
请注意,在VBA中,
-1
为True
,0
为False
。切换编译参数DEV_MODE=-1
将在整个VBA项目中切换开发模式。我不喜欢尝试将开关作为编译器设置-忘记更改它甚至比更改常量定义更可能
我发现您尝试检查用户名、设备名、文件路径或诸如此类的东西还不错。只需将逻辑放入一个小函数isTestMode()
(即使它是一个单行程序),该函数返回一个布尔值。在该功能中,如果另一个人将接管工作,则很容易转换为逻辑。使用此函数(无需其他!)检查是否执行调试语句
Public Function isTestMode() as boolean
' Checking current user
isTestMode = (environ("Username") = "FunThomas")
' Checking device name
isTestMode = (environ("ComputerName") = "MySuperPC")
' Checking if a specific file is present
isTestMode = Dir(thisworkbook.Path & "\IsTestMode") <> "")
End Function
作为布尔值的公共函数isTestMode()
'正在检查当前用户
isTestMode=(环境(“用户名”)=“FunThomas”)
'正在检查设备名称
isTestMode=(环境(“计算机名”)=“MySuperPC”)
'检查是否存在特定文件
isTestMode=Dir(thisworkbook.Path&“\isTestMode”)“”)
端函数
我不喜欢尝试将开关作为编译器设置-忘记更改它甚至比更改常量定义更可能
我发现您尝试检查用户名、设备名、文件路径或诸如此类的东西还不错。只需将逻辑放入一个小函数isTestMode()
(即使它是一个单行程序),该函数返回一个布尔值。在该功能中,如果另一个人将接管工作,则很容易转换为逻辑。使用此函数(无需其他!)检查是否执行调试语句
Public Function isTestMode() as boolean
' Checking current user
isTestMode = (environ("Username") = "FunThomas")
' Checking device name
isTestMode = (environ("ComputerName") = "MySuperPC")
' Checking if a specific file is present
isTestMode = Dir(thisworkbook.Path & "\IsTestMode") <> "")
End Function
作为布尔值的公共函数isTestMode()
'正在检查当前用户
isTestMode=(环境(“用户名”)=“FunThomas”)
'正在检查设备名称
isTestMode=(环境(“计算机名”)=“MySuperPC”)
'检查是否存在特定文件
isTestMode=Dir(thisworkbook.Path&“\isTestMode”)“”)
端函数
您可以使用工作簿路径中的文本文件作为条件
如果缺少文件('DebugMode.txt'在示例中)或未设置调试选项('DebugMode:On'在textfile中),请关闭调试模式,否则将其打开
如果在没有文本文件的情况下部署工作簿,调试模式将关闭
如果其他人需要打开调试模式,请共享/创建该文件
示例代码:
函数IsDebugMode()为布尔值
Const DebugOptionFileName As String=“DebugMode.txt”
Const DebugIsOnString As String=“DebugMode:On”
读取常数,当长度=1时
Dim txtStream作为对象
Dim DebugOptionFilePath作为字符串
IsDebugMode=False
DebugOptionFilePath=ThisWorkbook.Path&“\”&DebugOptionFileName
使用CreateObject(“Scripting.Filesystemobject”)
如果.files存在(DebugOptionFilePath),则
设置txtStream=.OpenTextFile(DebugOptionFilePath,ForReading,False)
直到txtStream.AtEndOfStream
如果txtStream.ReadLine=DebugIsOnString,则
IsDebugMode=True
退出Do
如果结束
环
如果结束
以
端函数
您可以使用工作簿路径中的文本文件作为条件
如果缺少文件('DebugMode.txt'在示例中)或未设置调试选项('DebugMode:On'在textfile中),请关闭调试模式,否则将其打开
如果在没有文本文件的情况下部署工作簿,调试模式将关闭
如果其他人需要打开调试模式,请共享/创建该文件
示例代码:
函数IsDebugMode()为布尔值
Const DebugOptionFileName As String=“DebugMode.txt”
Const DebugIsOnString As String=“DebugMode:On”
读取常数,当长度=1时
Dim txtStream作为对象
Dim DebugOptionFilePath作为字符串
IsDebugMode=False
DebugOptionFilePath=ThisWorkbook.Path&“\”&DebugOptionFileName
使用CreateObject(“Scripting.Filesystemobject”)
如果.files存在(DebugOptionFilePath),则
设置txtStream=.OpenTextFile(DebugOptionFilePath,ForReading,False)
直到txtStream.AtEndOfStream
如果txtStream.ReadLine=DebugIsOnString,则
IsDebugMode=True
退出Do
如果结束
环
如果结束
以
端函数
Possib