Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.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 如何在VBA中正确初始化全局单元格引用变量_Excel_Vba_Initialization_Global Variables - Fatal编程技术网

Excel 如何在VBA中正确初始化全局单元格引用变量

Excel 如何在VBA中正确初始化全局单元格引用变量,excel,vba,initialization,global-variables,Excel,Vba,Initialization,Global Variables,在我的VBA项目中,我在许多模块和子模块中引用了许多单元格。为了便于阅读,我以以下方式声明并初始化了单元格引用的变量: LowerBound = ThisWorkbook.Sheets("Rules").Range("B22").Value 我想在我的项目中只初始化这个变量一次,在这个实例中使用全局变量正确吗?我发现很多材料建议应该避免这些(根据这个答案)。如果这不正确,在整个项目中引用单元格时的最佳做法是什么?在声明变量用途时(假设它是整数): Public LowerBound为整数 一定

在我的VBA项目中,我在许多模块和子模块中引用了许多单元格。为了便于阅读,我以以下方式声明并初始化了单元格引用的变量:

LowerBound = ThisWorkbook.Sheets("Rules").Range("B22").Value

我想在我的项目中只初始化这个变量一次,在这个实例中使用全局变量正确吗?我发现很多材料建议应该避免这些(根据这个答案)。如果这不正确,在整个项目中引用单元格时的最佳做法是什么?

在声明变量用途时(假设它是整数):
Public LowerBound为整数


一定要在任何过程或函数之外声明它。

一个好的做法是在主过程中初始化全局变量,然后将它们传递给需要它们的任何其他过程。这有助于防止在另一个过程中无意中更改值的问题

如果您无法做到这一点,可能意味着您需要重新考虑代码的组织

编辑:是否在工作簿中初始化全局变量\u打开:

尽管您可能希望在工作簿\u Open事件中初始化它们,但除非需要它们,否则我不会这样做


例如,如果工作簿的打开时间可能超过一天,并且您根据一周中的哪一天初始化了一个变量,那么在工作簿打开时进行初始化将是一个问题。没有具体的细节,很难说,但我的一般建议是在依赖它们的任何过程开始时初始化它们。因此,例如,如果每次有人按下按钮时都需要对其进行初始化,则在响应按钮按下的例程中对其进行初始化。另一方面,如果它们依赖于工作簿打开时的状态,那么您可能希望在此时初始化它们。我希望这有帮助

并初始化它?我应该在工作簿_open()子文件夹下完成吗?我是否应该在一个sub中初始化它,并在需要时调用该sub?感谢您应该能够在任何子系统中初始化和更改它。因此,在使用它的第一个子系统中初始化它是有意义的。这将设置值,以便在将来的sub中使用。为简洁起见,您可以将该单元格命名为
Range(“name”)。value
[name].value
谢谢,并且在打开工作簿时在一个主过程中初始化所有变量是否是一种良好的做法,因此请使用工作簿_open sub()?