【问题标题】:Creating a List on Another Sheet - Run-Time Error 9在另一个工作表上创建列表 - 运行时错误 9
【发布时间】:2017-10-04 15:49:34
【问题描述】:

我正在使用从another post 编辑的以下代码来列出开始日期和结束日期之间的所有日期。该列表是在与包含开始日期和结束日期的单元格不同的工作表上创建的。如果我打开了 sheet6,则代码有效,但如果我在 sheet1 上则无效。我收到“运行时错误 9:下标超出范围”。调试突出显示对 sheet6 的引用。无论活动工作表如何,我如何修改此代码以使其正常工作?

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

【问题讨论】:

  • 不应该" Worksheets("sheet6").Range("A1").Select" 给你一些提示该怎么做?
  • 您不应该使用 Select,因为它效率低且通常没有必要。如果你要这样做,这里的问题是你必须先激活工作表,然后选择单元格 - 你不能选择一个不活动的工作表上的单元格。
  • 哦,好的,这很有帮助。我会调查的。感谢你的回复。 @SJR
  • 我的荣幸。顺便说一句,我假设 CZ 和 DA 是命名范围?可能与列字母混淆,因此您可能需要考虑重命名。
  • 这是个好建议。我对这张表 (800+) 的单元格引用非常深入,但我会在以后的项目中记住这一点。 @SJR

标签: vba excel


【解决方案1】:

基本上,始终尝试设置并完全限定您的工作表和范围变量。然后直接使用它们,而不是使用 Select/Activate。

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

【讨论】:

  • 效果很好!谢谢你。我将仔细阅读您的代码并真正理解它,以便将来可以复制它。非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-13
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多