复制工作表时 VBA 错误 '9' 下标超出范围

标签 vba excel

我目前正在尝试创建一个代码,该代码将从多个工作簿中获取所有工作表并将它们粘贴到预先选择的工作簿中。

到目前为止,代码有效,但只是在某些时候,其余时间告诉我 workbooks("Name").Sheet(i)下标超出范围。错误似乎没有模式

If Not UserForm1.filePath = "" Then
    Dim db As DAO.Database
    Set db = OpenDatabase(UserForm1.filePath)
    Dim rst As DAO.Recordset
    Set rst = db.OpenRecordset("tIO")
    Dim Filename As String
    Dim WS As Worksheet
    Dim Counter As Integer
    Dim i As Integer
    i = 1
        While Not rst.EOF
            If Not Filename = rst!Filename Then
                Filename = rst!Filename
                Dim wbSource As Workbook
                Set wbSource = Workbooks.Open(Filename:=Filename)

                Counter = Counter + 1
                'Loop through all of the worksheets in the Active workbook
                For Each WS In wbSource.Worksheets
                    WS.Activate
                    WS.Select
                    WS.Name = (WS.Name & "_" & Counter)
                    WS.Activate
                    WS.Select
                    WS.Copy After:=Workbooks("Appendix 3 V0_00.xls").Sheets(i)
                    i = i + 1
                Next
                wbSource.Close False
            End If
            rst.MoveNext
        Wend
End If

我写了Workbooks("Appendix 3 V0_00.xls")因为当我使用 with 时,它更频繁地抛出相同的错误所以现在看起来像这样;
If Not UserForm1.filePath = "" Then
    Dim db As DAO.Database
    Set db = OpenDatabase(UserForm1.filePath)
    Dim rst As DAO.Recordset
    Set rst = db.OpenRecordset("tIO")
    Dim Filename As String
    Dim WS As Worksheet
    Dim Counter As Integer
    Dim j As Integer
    While Not rst.EOF
        If Not Filename = rst!Filename Then
            Filename = rst!Filename
            Dim wbSource As Workbook
            If Dir(Filename) <> "" Then
                Set wbSource = Workbooks.Open(Filename:=Filename)
                Counter = Counter + 1
                'Loop through all of the worksheets in the Active workbook
                For j = 1 To wbSource.Worksheets.Count
                    wbSource.Sheets(j).Activate
                    wbSource.Sheets(j).Select
                    wbSource.Sheets(j).Name = (wbSource.Sheets(j).Name & "_" & Counter)
                    wbSource.Sheets(j).Activate
                    wbSource.Sheets(j).Select
                    wbSource.Sheets(j).Copy After:=Workbooks("Appendix 3 V0_00.xls").Sheets(Workbooks("Appendix 3 V0_00.xls").Sheets.Count)
                Next
                wbSource.Close False
            End If
        End If
        rst.MoveNext
    Wend


End If
wb.SaveAs (Module1.AppendicesFolder & "\" & UserForm1.TxtJobNumber & " " & UserForm1.TxtJobName & " Appendix3 V0.00.xls")
wb.Close

xlApp.Quit
End Sub

它似乎只有在我多次使用它之后才会发生,它会不会是 excel 不能正常关闭?

最佳答案

如果错误出现在 WS.Copy After:=Workbooks("Appendix 3 V0_00.xls").Sheets(i) ,我建议你创建一个新的 Workbook 变量。

Dim Wb As WorkBook
Set Wb = Workbooks("Appendix 3 V0_00.xls")

然后你将它用于你的复制行:
WS.Copy After:=Wb.Sheets(Wb.Sheets.Count)

或者按照@Jeeped 的建议,您可以简单地使用 With陈述 :
With Workbooks("Appendix 3 V0_00.xls")
    If Not UserForm1.filePath = "" Then
        Dim db As DAO.Database
        Set db = OpenDatabase(UserForm1.filePath)
        Dim rst As DAO.Recordset
        Set rst = db.OpenRecordset("tIO")
        Dim Filename As String
        Dim WS As Worksheet
        Dim Counter As Integer
        Dim i As Integer
        i = 1
            While Not rst.EOF
                If Not Filename = rst!Filename Then
                    Filename = rst!Filename
                    Dim wbSource As Workbook
                    Set wbSource = Workbooks.Open(Filename:=Filename)

                    Counter = Counter + 1
                    'Loop through all of the worksheets in the Active workbook
                    For Each WS In wbSource.Worksheets
                        WS.Activate
                        WS.Select
                        WS.Name = (WS.Name & "_" & Counter)
                        WS.Activate
                        WS.Select
                        WS.Copy After:= .Sheets(.Sheets.Count)
                        i = i + 1
                    Next
                    wbSource.Close False
                End If
                rst.MoveNext
            Wend
    End If
End With

关于复制工作表时 VBA 错误 '9' 下标超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33608340/

相关文章:

excel - 卡住。我需要一些 VBA 代码来在 Excel 范围内的每个单元格中的字符串周围插入双引号

excel - 如何阻止excel运行所有错误

C# 迭代 excel 工作表的有效方法

excel - 关闭时设置密码

javascript - 如何在网页上找到按钮

excel - 将数据传输到新工作表

excel - VBA excel - 从 excel 调用函数

XML 模式 - 导入模式中的新行

java - Apache POI 解析和处理空单元格

Excel VBA - 仅在 with 语句之后结束的 while 语句