資格參考

當提到 worksheetrangecells 時,完全限定參考是很重要的。

例如:

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")