首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >程序直接转到else语句,然后产生运行时错误'9‘下标超出范围

程序直接转到else语句,然后产生运行时错误'9‘下标超出范围
EN

Stack Overflow用户
提问于 2014-07-17 03:02:34
回答 1查看 229关注 0票数 0

我是VBA新手,正在尝试设计一个程序,该程序将遍历其中包含字符串的列,并为每个唯一的字符串名称创建一个以该字符串值作为其名称的新工作表对象,然后将该行中的值复制并粘贴到新工作表中。然后,所有相同的字符串也应该将其行中的值复制到新工作表中。我甚至不确定程序本身是否可以工作,但在我可以检查之前,我一直收到一个我无法修复的错误。

错误是运行时错误'9‘下标超出范围。

问题是,新的工作表正在创建,但没有填充任何数据。这就好像程序直接转到else语句,然后发现一个错误,我不确定如何修复它,即使它至少应该通过if语句一次,因为我知道A3中的字符串与A2中的字符串相同。下面是完整的代码:

代码语言:javascript
运行
复制
Sub FilterByClass()
Dim i As Long
Dim j As Long  
Dim sheetName As String

ActiveSheet.Name = "AllClasses"
sheetName = Worksheets("AllClasses").Cells(2, 1).Value
Worksheets.Add
ActiveSheet.Name = sheetName
Worksheets("AllClasses").Activate
Worksheets(sheetName).Rows(1) = ActiveSheet.Rows(1)
Worksheets(sheetName).Rows(2) = ActiveSheet.Rows(2)
j = 3
For i = 3 To Rows.Count
    If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
        Worksheets(Cells(i, 1).Value).Rows(j) = ActiveSheet.Rows(i)
        j = j + 1
    Else
        Worksheets.Add
        ActiveSheet.Name = ThisWorkbook.Sheets(sheetName).Cells(i, 1).Value
        Worksheets("AllClasses").Activate
        j = 1
        Worksheets(Cells(i, 1).Value).Rows(j) = ActiveSheet.Rows(1)
        j = j + 1
        Worksheets(Cells(i, 1).Value).Rows(j) = ActiveSheet.Rows(i)
    End If
Next i 
End Sub

任何帮助都将不胜感激。如果您在其余代码中看到明显不能按预期工作的任何内容,请也指出它。谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-07-17 03:28:28

在命名工作表之前,请检查该工作表是否像注释中提到的David那样存在。

下面是我最喜欢的检查工作表是否存在的方法

代码语言:javascript
运行
复制
Sub Sample()
    If DoesSheetExist("AllClasses") Then
        MsgBox "Sheet Already Exists"
    Else
        ActiveSheet.Name = "AllClasses"
    End If
End Sub

Function DoesSheetExist(Sh As String) As Boolean
    Dim ws As Worksheet

    On Error Resume Next
    Set ws = ThisWorkbook.Sheets(Sh)
    On Error GoTo 0

    If Not ws Is Nothing Then DoesSheetExist = True
End Function

此外,如果工作表不存在,则工作簿可能受到保护。要检查是否是这种情况,可以使用以下代码

代码语言:javascript
运行
复制
If ThisWorkbook.ProtectStructure = True Then
    MsgBox "Workbook structure is protected"
Else
    MsgBox "Workbook structure is not protected"
End If
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24788661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档