【问题标题】:Subscript out of range, VBA下标超出范围,VBA
【发布时间】:2019-02-14 22:30:01
【问题描述】:

所以我有这行代码


Dim j As Long, i As Long
j = 18

For i = 3 To 47
    If ThisWorkbook.Sheets("Skills").Range("E" & i) > 0 Then
        ThisWorkbook.Sheets("MainPage").Range("B" & j) = ThisWorkbook.Sheets("Skills").Range("B" & i)
            j = j + 1
    End If
Next

End Sub

我的问题如下, 首先在If .... 行我有对象需要错误,现在我修复了(我想)但现在在下一行sheetSkills("B" & j).... 我得到下标超出范围错误。有人有什么想法吗?实在想不通

【问题讨论】:

  • 运行时,活动工作簿中是否有名为“MainPage”和“Skills”的工作表?这是我可以在这段代码中看到的唯一潜在下标错误 - ij 都受循环约束。
  • 我有名为 MainPage 和 Skills 的工作表,是的,因为调用它 Sheet1 或 Sheet 2 将是尴尬的代码恕我直言
  • 请更新/添加您正在尝试的当前代码...我在任何地方都看不到wsSkills。此外,如果您尝试引用 wsSkills 上的范围,则需要使用 wsSkills.Range("B"&j)wsSkills.Cells(j,2)
  • 关键字是“活动”工作簿。当您使用Application.Worksheets("Whatever") 时,它只会在活动工作簿中查找该工作表名称。如果你有不止一个开放,而错误的一个有焦点,你可能会也可能不会找到它。请参阅@urdearboy 的回答,了解更好的解决方法。
  • 我当前收到错误的代码行是 ThisWorkbook.Sheets("MainPage").Range("B" & j) = ThisWorkbook.Sheets("Skills").Range("B" & i) 工作表名称正确,列字母也正确

标签: excel vba syntax


【解决方案1】:
  1. 也许您的代码正在寻找另一本书?试试ThisWorkbook.Sheets
  2. 添加Option Explicit 以强制变量声明(尽管这不是问题的根源)
  3. 最后,价值转移应该是Range.Value = Range.Value

我能看到的唯一其他错误是您的工作表名称不完全匹配。我运行这段代码没有问题(和你的)。如果您的实际工作表名称有一个滞后空格或其他一些乍一看并不明显的字符,这将给您Subscript Out of Range,因为这需要精确匹配。


Sub Skills()

Dim j As Long, i As Long
j = 18

For i = 3 To 47
    If ThisWorkbook.Sheets("Skills").Range("E" & i) > 0 Then
        ThisWorkbook.Sheets("MainPage").Range("B" & j).Value = ThisWorkbook.Sheets("Skills").Range("E" & i).Value
            j = j + 1
    End If
Next

End Sub

您可以使用它来测试您的工作表名称是否被找到。如果这些行中的任何一行出错,则意味着 VBA 无法在您的书中找到该工作表。

Sub Test()

Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("Skills")
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("MainPage")

End Sub

【讨论】:

  • 我已经复制了活动工作簿中工作表的名称,我也没有打开其他工作簿,并且复制的名称粘贴在代码内的“”之间。我使用了您的代码以及我自己的代码,并且一直收到相同的错误,下标超出范围...我在工作簿中都有可用的两张表您提到的“价值转移”基本上是名称的转移cell Sheets("Skills").Range("B" & i) 所以我猜是一个字符串。我还编辑了最后一个 Sheets("Skills") 参考中的列字母
  • 解决方案已验证!错误出现在某处的 MainPage 名称中,我真的不知道名称错误来自哪里,但现在我将该名称更改为“Main”并且代码工作完美!谢谢大家!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多