在其他工作表上创建列表 - 运行时错误9

问题描述:

我使用以下代码编辑从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

基本上,总是尝试设置并完全限定您的工作表和范围变量。然后直接与那些人一起工作,而不是使用选择/激活。

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