我是VBA新手,正在尝试设计一个程序,该程序将遍历其中包含字符串的列,并为每个唯一的字符串名称创建一个以该字符串值作为其名称的新工作表对象,然后将该行中的值复制并粘贴到新工作表中。然后,所有相同的字符串也应该将其行中的值复制到新工作表中。我甚至不确定程序本身是否可以工作,但在我可以检查之前,我一直收到一个我无法修复的错误。
错误是运行时错误'9‘下标超出范围。
问题是,新的工作表正在创建,但没有填充任何数据。这就好像程序直接转到else语句,然后发现一个错误,我不确定如何修复它,即使它至少应该通过if语句一次,因为我知道A3中的字符串与A2中的字符串相同。下面是完整的代码:
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任何帮助都将不胜感激。如果您在其余代码中看到明显不能按预期工作的任何内容,请也指出它。谢谢
发布于 2014-07-17 03:28:28
在命名工作表之前,请检查该工作表是否像注释中提到的David那样存在。
下面是我最喜欢的检查工作表是否存在的方法
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此外,如果工作表不存在,则工作簿可能受到保护。要检查是否是这种情况,可以使用以下代码
If ThisWorkbook.ProtectStructure = True Then
MsgBox "Workbook structure is protected"
Else
MsgBox "Workbook structure is not protected"
End Ifhttps://stackoverflow.com/questions/24788661
复制相似问题