資格參考
當提到 worksheet
,range
或 cells
時,完全限定參考是很重要的。
例如:
ThisWorkbook.Worksheets("Sheet1").Range(Cells(1, 2), Cells(2, 3)).Copy
不完全限定:Cells
引用沒有與之關聯的工作簿和工作表。沒有明確的引用,Cells 預設引用 ActiveSheet
。因此,如果 Sheet1
以外的工作表是當前的 ActiveSheet
,則此程式碼將失敗(產生不正確的結果)。
解決此問題的最簡單方法是使用 With
語句,如下所示:
With ThisWorkbook.Worksheets("Sheet1")
.Range(.Cells(1, 2), .Cells(2, 3)).Copy
End With
或者,你可以使用 Worksheet 變數。 (如果你的程式碼需要引用多個工作表,這很可能是首選方法,例如將資料從一個工作表複製到另一個工作表。)
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
ws1.Range(ws1.Cells(1, 2), ws1.Cells(2, 3)).Copy
另一個常見問題是在不限定工作簿的情況下引用 Worksheets 集合。例如:
Worksheets("Sheet1").Copy
工作表 Sheet1
不完全合格,缺少工作簿。如果程式碼中引用了多個工作簿,則可能會失敗。而是使用以下之一:
ThisWorkbook.Worksheets("Sheet1") '<--ThisWorkbook refers to the workbook containing
'the running VBA code
Workbooks("Book1").Worksheets("Sheet1") '<--Where Book1 is the workbook containing Sheet1
但是,請避免使用以下內容:
ActiveWorkbook.Worksheets("Sheet1") '<--Valid, but if another workbook is activated
'the reference will be changed
同樣,對於 range
物件,如果沒有明確限定,range
將引用當前活動的工作表:
Range("a1")
是相同的:
ActiveSheet.Range("a1")