VBA 如何正确初始化全局单元格引用变量
How to initialise global cell reference variables correctly in VBA
在我的 VBA 项目中,我有许多单元格,我在许多模块和子单元中都引用了这些单元格。为了便于阅读,我通过以下方式声明并初始化了一个单元格引用变量:
LowerBound = ThisWorkbook.Sheets("Rules").Range("B22").Value
我想在我的项目中只初始化一次这个变量,在这个实例中使用全局变量是否正确?我发现很多 material 建议应该避免这些(根据这个答案 Initialising global variables in VBA)。如果这是不正确的,在整个项目中引用单元格时最佳做法是什么?
当声明你的变量使用时(假设它是一个整数):
Public LowerBound as Integer
一定要在任何过程或函数之外声明它。
一个好的做法是在主过程中初始化全局变量,然后将它们传递给需要它们的任何其他过程。这有助于防止无意中更改另一个过程中的值的问题。
如果您无法做到这一点,则可能意味着您需要重新考虑代码的组织方式。
编辑:是否在WorkBook_Open中初始化全局变量:
尽管您可能想在 Workbook_Open 事件中初始化它们,但我不会这样做,除非那是需要它们的时候。
例如,如果您的工作簿可以打开超过一天,并且您根据星期几初始化了一个变量,那么在工作簿打开时这样做就会出现问题。没有具体细节,很难说,但我的一般建议是在依赖它们的任何进程开始时初始化它们。因此,例如,如果每次有人按下按钮时都需要,请在响应按钮按下的例程中初始化它们。另一方面,如果它们依赖于打开工作簿时的事物状态,那么您会希望在那一刻对它们进行初始化。希望对您有所帮助
在我的 VBA 项目中,我有许多单元格,我在许多模块和子单元中都引用了这些单元格。为了便于阅读,我通过以下方式声明并初始化了一个单元格引用变量:
LowerBound = ThisWorkbook.Sheets("Rules").Range("B22").Value
我想在我的项目中只初始化一次这个变量,在这个实例中使用全局变量是否正确?我发现很多 material 建议应该避免这些(根据这个答案 Initialising global variables in VBA)。如果这是不正确的,在整个项目中引用单元格时最佳做法是什么?
当声明你的变量使用时(假设它是一个整数):
Public LowerBound as Integer
一定要在任何过程或函数之外声明它。
一个好的做法是在主过程中初始化全局变量,然后将它们传递给需要它们的任何其他过程。这有助于防止无意中更改另一个过程中的值的问题。
如果您无法做到这一点,则可能意味着您需要重新考虑代码的组织方式。
编辑:是否在WorkBook_Open中初始化全局变量:
尽管您可能想在 Workbook_Open 事件中初始化它们,但我不会这样做,除非那是需要它们的时候。
例如,如果您的工作簿可以打开超过一天,并且您根据星期几初始化了一个变量,那么在工作簿打开时这样做就会出现问题。没有具体细节,很难说,但我的一般建议是在依赖它们的任何进程开始时初始化它们。因此,例如,如果每次有人按下按钮时都需要,请在响应按钮按下的例程中初始化它们。另一方面,如果它们依赖于打开工作簿时的事物状态,那么您会希望在那一刻对它们进行初始化。希望对您有所帮助