2017-10-04 37 views
0

我使用以下代碼編輯從another post列出開始日期和結束日期之間的所有日期。該列表正在與包含開始日期和結束日期的單元格不同的工作表上創建。如果我打開sheet6,代碼就可以工作,但如果我打開sheet1,代碼就不會工作。我得到'運行時錯誤9:下標超出範圍'。調試突出顯示對sheet6的引用。我如何修改此代碼以使其工作而不管活動工作表?在其他工作表上創建列表 - 運行時錯誤9

Sub GenerateDates() 

Dim FirstDate As Date 
Dim LastDate As Date 
Dim NextDate As Date 

FirstDate = Sheet1.Range("CZ").Value 
LastDate = Sheet1.Range("DA").Value 

NextDate = FirstDate 
Worksheets("sheet6").Range("A1").Select 
Do Until NextDate > LastDate 

    ActiveCell.Value = NextDate 
    ActiveCell.Offset(1, 0).Select 
    NextDate = NextDate + 1 

Loop 

End Sub 
+0

不應該「工作表(」sheet6「)。範圍(」A1「)。選擇」給你某種提示怎麼辦? –

+3

您不應該使用Select,因爲它效率低下,通常是不必要的。如果你打算,這裏的問題是你必須首先激活工作表,然後選擇單元格 - 你不能選擇不活動的工作表上的單元格。 – SJR

+1

噢,這很有幫助。我會研究一下。謝謝您的回覆。 @SJR – Kim

回答

1

基本上,總是嘗試設置並完全限定您的工作表和範圍變量。然後直接與那些人一起工作,而不是使用選擇/激活。

Sub GenerateDates() 

    Dim wb As Workbook 
    Dim wsData As Worksheet 
    Dim wsDest As Worksheet 
    Dim rDest As Range 
    Dim FirstDate As Date 
    Dim LastDate As Date 
    Dim NextDate As Date 

    Set wb = ActiveWorkbook 
    Set wsData = wb.Sheets(1) 
    Set wsDest = wb.Sheets(6) 
    Set rDest = wsDest.Range("A1") 

    FirstDate = wsData.Range("CZ").Value 
    LastDate = wsData.Range("DA").Value 
    NextDate = FirstDate 

    Do Until NextDate > LastDate 
     rDest.Value = NextDate 
     Set rDest = rDest.Offset(1) 
     NextDate = NextDate + 1 
    Loop 

End Sub 
+0

完美的工作!謝謝。我將通讀您的代碼並真正理解它,以便將來可以複製它。我非常感謝你的幫助。 – Kim