VBA – 为什么要将工作簿和工作表保存到变量中
VBA – Why save workbooks and worksheets into variables
我用谷歌搜索了这个,但找不到答案。
我知道使用现有对象的副本是一种很好的做法,又名:
Dim wb as Workbook
Dim ws as Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
'proceed to work with ws instead of ThisWorksheet
'then at the end of this script rewrite ThisWorkbook.Worksheets(1) with ws
但为什么会这样呢?
为什么不直接使用有问题的工作表呢?
我说的不仅仅是你想编辑工作簿的情况,还有你只需要从工作簿中读取数据的情况。
我这样做的主要原因是我不必打那么多字。我宁愿输入 wb
或 ws
而不是 ThisWorkbook
即使有自动完成功能。但除了普遍的懒惰之外,还有使用对象变量的正当理由。
在生产代码中,您应该避免重复任何文字值。避免,我的意思是要意识到这一点——有时候它是可以的。不要在代码中的多个位置使用 Worksheets(1)
,因为 1
文字可能会更改,您必须在多个位置更改它。而你 运行 有错过其中一个地方的风险。所以你可以
Dim lSummarySheetIndex as Long
lSummarySheetIndex = 1
并在你的代码中到处使用 Worksheets(lSummarySheetIndex)
。然后如果位置发生变化,您可以在一个地方更新变量并且知道您没有破坏任何东西。或者,更常见的是,您可以使用对象变量来实现相同的目的。
您可能有一个 Worksheets(1)
合适的实例。如果您的代码必须处理第一个工作表,而不管是否有人移动了东西,那么这就是“规则”不适用的地方。
同名。取Workbooks("SalesQ1.xlsm")
。您可以将名称设为变量并使用它,或者将工作簿设为对象变量并使用它。
ThisWorkbook
或 Sheets(1)
等关键字与变量没有太大区别。它们内置于对象模型中,是指向内存中对象的指针。所以 ThisWorkbook
说转到内存位置 15246789 和 return 那里有什么。当您使用 Set wb = ThisWorkbook
时,您告诉 VBA 将 15246789 存储在 wb 变量中,并且当您引用该变量时,它知道该对象要转到哪个内存位置。使用对象变量的额外成本非常低,而且并不比使用内置关键字更间接。
我用谷歌搜索了这个,但找不到答案。 我知道使用现有对象的副本是一种很好的做法,又名:
Dim wb as Workbook
Dim ws as Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
'proceed to work with ws instead of ThisWorksheet
'then at the end of this script rewrite ThisWorkbook.Worksheets(1) with ws
但为什么会这样呢? 为什么不直接使用有问题的工作表呢? 我说的不仅仅是你想编辑工作簿的情况,还有你只需要从工作簿中读取数据的情况。
我这样做的主要原因是我不必打那么多字。我宁愿输入 wb
或 ws
而不是 ThisWorkbook
即使有自动完成功能。但除了普遍的懒惰之外,还有使用对象变量的正当理由。
在生产代码中,您应该避免重复任何文字值。避免,我的意思是要意识到这一点——有时候它是可以的。不要在代码中的多个位置使用 Worksheets(1)
,因为 1
文字可能会更改,您必须在多个位置更改它。而你 运行 有错过其中一个地方的风险。所以你可以
Dim lSummarySheetIndex as Long
lSummarySheetIndex = 1
并在你的代码中到处使用 Worksheets(lSummarySheetIndex)
。然后如果位置发生变化,您可以在一个地方更新变量并且知道您没有破坏任何东西。或者,更常见的是,您可以使用对象变量来实现相同的目的。
您可能有一个 Worksheets(1)
合适的实例。如果您的代码必须处理第一个工作表,而不管是否有人移动了东西,那么这就是“规则”不适用的地方。
同名。取Workbooks("SalesQ1.xlsm")
。您可以将名称设为变量并使用它,或者将工作簿设为对象变量并使用它。
ThisWorkbook
或 Sheets(1)
等关键字与变量没有太大区别。它们内置于对象模型中,是指向内存中对象的指针。所以 ThisWorkbook
说转到内存位置 15246789 和 return 那里有什么。当您使用 Set wb = ThisWorkbook
时,您告诉 VBA 将 15246789 存储在 wb 变量中,并且当您引用该变量时,它知道该对象要转到哪个内存位置。使用对象变量的额外成本非常低,而且并不比使用内置关键字更间接。