下标超出范围,VBA

问题描述 投票:-1回答:1

所以我有这行代码


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)....我得到下标超出范围错误。任何想法?我真的无法理解

excel vba syntax
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.