在其他工作表上创建列表 - 运行时错误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
答
基本上,总是尝试设置并完全限定您的工作表和范围变量。然后直接与那些人一起工作,而不是使用选择/激活。
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
不应该“工作表(”sheet6“)。范围(”A1“)。选择”给你某种提示怎么办? –
您不应该使用Select,因为它效率低下,通常是不必要的。如果你打算,这里的问题是你必须首先激活工作表,然后选择单元格 - 你不能选择不活动的工作表上的单元格。 – SJR
噢,这很有帮助。我会研究一下。谢谢您的回复。 @SJR – Kim