Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 快速切换到";PROD";及;发展";模式_Excel_Vba_Ms Access_Debugging_Devops - Fatal编程技术网

Excel 快速切换到";PROD";及;发展";模式

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管道) 编辑 现在,我正在使用一个

我使用一些高级的自动宏开发VBA代码,这些宏在开发阶段执行“管道”和额外的调试。 但是,当我将文件发送给用户(PROD阶段)时,我希望所有这些都关闭

DEV和PROD之间的切换经常发生(git+devops方法)

在DEV和PROD之间实现快速“切换”的最佳/最优雅的方式是什么? 是的,我可以只使用一个全局常量isDebug(我在一些项目中使用过),但是它很繁重、不雅观而且容易出错(我不止一次忘记了“翻转”开关——正如我前面所说的,快速而敏捷的“几乎”CI/CD管道)

编辑

现在,我正在使用一个快速脏黑客(我不喜欢脏黑客)来检查Excel文件是否从路径中有我的登录名的位置运行。如果是-这意味着我正在处理文件。如果没有-其他人正在使用它,我们不需要任何调试模式。但是它很难看,我可以预见很多问题(例如,明天可能会有其他人开发这些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项目中切换开发模式。

在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