Excel 离开是一种好的做法吗;“调试.打印”;代码中包含的指令;生产;?

Excel 离开是一种好的做法吗;“调试.打印”;代码中包含的指令;生产;?,excel,vba,Excel,Vba,在Excel VBA中,将Debug.Print指令保留在“生产”中的代码中是否是一种良好的做法?当出现问题时,在用户机器上实时调试工作表非常有用。Visual Studio关闭时是否会影响性能?如果没有,您有什么建议?Debug.Print指令的性能成本很低。所以我会在执行无数次的循环中避免它们。除了那些箱子,我认为可以保留它们。 您还可以将条件编译指令(#if)与编译器常量(#const)结合使用,在不影响性能的情况下全局启用/禁用它们 #CONST developMode = True

在Excel VBA中,将
Debug.Print
指令保留在“生产”中的代码中是否是一种良好的做法?当出现问题时,在用户机器上实时调试工作表非常有用。Visual Studio关闭时是否会影响性能?如果没有,您有什么建议?

Debug.Print指令的性能成本很低。所以我会在执行无数次的循环中避免它们。除了那些箱子,我认为可以保留它们。
您还可以将条件编译指令(
#if
)与编译器常量(
#const
)结合使用,在不影响性能的情况下全局启用/禁用它们

#CONST developMode = True

sub Xyz
  #If developMode Then
    Debug.Print "something"
  #End If
End Sub

我通常有两个版本;不带调试的prod和带调试的prod。这与catchall错误处理程序日志记录相结合,意味着如果用户遇到问题,我可以向他们部署调试版本,他们可以运行该版本

我运行的宏注释了debug.print语句,因此这不是真正的维护开销

一直运行调试版本的问题在于(对于Excel VBA来说,这通常不是一个性能问题),你的应用程序不断地发出它不需要的信息。例如,在具有受控电子表格的环境中,这可能被视为一件坏事

在全局错误处理方面,对于每个要进行错误处理的函数,仍然需要On error GoTo语句。但是,您可以通过管道将它们连接到一个公共函数:

Public Function HandleTheNastyErrors(E As ErrObject, ByVal writeLog As Boolean = True) 

    Select Case E.Number 

    Case xxx 

        ...specific error handling... 

    Case Else 
        ... Display a message to the user about how you dont know what happened....             
    End Select 

    If writeLog Then

       ...Log Writing Code...

    End If

End Function 
然后,一个错误:

ErrorHandler:
 Call HandleTheNastyErrors(Err, True)

Show do the trick

@iDevelop+1每天学习新东西-没有意识到Excel支持的条件编译!谢谢。足够清晰,可以干掉a+1:)。顺便说一句,在这篇有趣的文章中讨论了条件编译(以及一些有用的其他东西):你有这方面的源代码吗?我就是这样做的,全局变量是
DebugMode
。我在
这个工作簿上做了一个小检查。如果
DebugMode
为True,则保存
以标记,这有助于阻止它潜入生产环境。@Lunatik:这也很好,但在性能影响方面,全局(以及任何“正常”)变量都会对性能产生影响,而编译器常量则不会(当设置为生产模式时).你能评论一下你的“通吃”吗?到目前为止,我还不知道如何巧妙地处理错误。谢谢@杰罗梅格,给你。希望能有帮助。将错误对象自身传递给函数…这是一个有趣的想法。你说的是“Visual Studio”,但你说的是VBA,对吗?你是说VBE吗?啊,是的,我想我现在才明白人们所说的VBE。。。是的,我想是这样:)[ALT+F11]1)如果捕获用户在出错时所做的事情很重要,那么事务日志将是一个更好的选择。每次运行或每天启动一个新文件;删除任何超过48小时的文件。是的,有一个性能成本,但你会如何衡量它。2) VisualStudio是微软的专业语言开发环境。VB2010的速度是VBA/VBE的数百倍,并且有数千个很酷的工具。如果要使用工作表,可以从中访问Excel。根据,编译Visual Basic时会删除debug.print语句。。。。但与VB不同的是,VBA被解释为。。。(或者是在运行时编译的?)。我想说解释,因为我可以在断点处编写VBA:P