永远不要假设工作表
即使你的所有工作都针对单个工作表,在代码中明确指定工作表仍然是一个很好的做法。这种习惯使得以后更容易扩展代码,或者提升 Sub
或 Function
的部分(或全部)以便在其他地方重复使用。许多开发人员习惯于(重新)在代码中使用相同的本地变量名称作为工作表,这使得重用代码变得更加直接。
例如,以下代码含糊不清 - 但有效! - 只要开发人员不激活或更改为其他工作表:
Option Explicit
Sub ShowTheTime()
'--- displays the current time and date in cell A1 on the worksheet
Cells(1, 1).Value = Now() ' don't refer to Cells without a sheet reference!
End Sub
如果 Sheet1
处于活动状态,则 Sheet1 上的单元格 A1 将填充当前日期和时间。但是,如果用户出于任何原因更改了工作表,则代码将更新工作表当前处于活动状态的任何内容。目标工作表不明确。
最佳做法是始终确定代码所涉及的工作表:
Option Explicit
Sub ShowTheTime()
'--- displays the current time and date in cell A1 on the worksheet
Dim myWB As Workbook
Set myWB = ThisWorkbook
Dim timestampSH As Worksheet
Set timestampSH = myWB.Sheets("Sheet1")
timestampSH.Cells(1, 1).Value = Now()
End Sub
上面的代码清楚地标识了工作簿和工作表。虽然看起来有点矫枉过正,但是创建一个关于目标引用的好习惯可以避免将来的问题。