VBA,数组范围错误,下标超出范围

时间:2018-08-14 13:38:48

标签: excel vba excel-vba

嗨,我正在尝试使我的数组更具动态性,以将所有文件路径包括在G列中。但是,当我尝试使用subscript out of range之类的方法或任何解决方案时,却遇到arrayFilePaths = Range("G4:G5")的问题,因此我很难做到这一点从这里Put entire column (each value in column) in an array?

我在type mismatch行得到subscript out of rangeOK = primaryDoc.Open(arrayFilePaths(0))

我的代码:

Sub main()

        Dim arrayFilePaths() As Variant
        Set app = CreateObject("Acroexch.app")

        arrayFilePaths = Array(Range("G4"), Range("G5"))

        Set primaryDoc = CreateObject("AcroExch.PDDoc")
        OK = primaryDoc.Open(arrayFilePaths(0))
        Debug.Print "PRIMARY DOC OPENED & PDDOC SET: " & OK

        For arrayIndex = 1 To UBound(arrayFilePaths)
            numPages = primaryDoc.GetNumPages() - 1

            Set sourceDoc = CreateObject("AcroExch.PDDoc")
            OK = sourceDoc.Open(arrayFilePaths(arrayIndex))
            Debug.Print "SOURCE DOC OPENED & PDDOC SET: " & OK

            numberOfPagesToInsert = sourceDoc.GetNumPages

            OK = primaryDoc.InsertPages(numPages, sourceDoc, 0, numberOfPagesToInsert, False)
            Debug.Print "PAGES INSERTED SUCCESSFULLY: " & OK

            OK = primaryDoc.Save(PDSaveFull, arrayFilePaths(0))
            Debug.Print "PRIMARYDOC SAVED PROPERLY: " & OK

            Set sourceDoc = Nothing
        Next arrayIndex

        Set primaryDoc = Nothing
        app.Exit
        Set app = Nothing
        MsgBox "DONE"
    End Sub

1 个答案:

答案 0 :(得分:1)

我现在不是使用数组,而是使用集合使事情变得容易一些。另外,我将保存文件移出了循环,以免每次插入文件时都不会保存文件。

主文档的路径(也就是您要插入的路径)已设置为索引1。range循环中的每个单元格都会为您要插入到主文档中的文件添加路径,起始于索引2。

我还稍微修改了错误消息传递(告诉您它在什么索引上失败)

Sub main()

    Set app = CreateObject("Acroexch.app")

    Dim FilePaths As Collection
    Set FilePaths = New Collection

    FilePaths.Add "PRIMARY DOC PATHWAY HERE"

    Dim cell As Range
    For Each cell In Range("G4:G5")
        FilePaths.Add cell.Value
    Next cell

    Set primaryDoc = CreateObject("AcroExch.PDDoc")
    OK = primaryDoc.Open(FilePaths(1))
    Debug.Print "PRIMARY DOC OPENED & PDDOC SET: " & OK

    For colIndex = 2 To FilePaths.Count
        numPages = primaryDoc.GetNumPages() - 1

        Set sourceDoc = CreateObject("AcroExch.PDDoc")
        OK = sourceDoc.Open(FilePaths(colIndex))
        Debug.Print "(" & colIndex & ") SOURCE DOC OPENED & PDDOC SET: " & OK

        numberOfPagesToInsert = sourceDoc.GetNumPages

        OK = primaryDoc.InsertPages(numPages, sourceDoc, 0, numberOfPagesToInsert, False)
        Debug.Print "(" & colIndex & ") PAGES INSERTED SUCCESSFULLY: " & OK

        Set sourceDoc = Nothing
    Next colIndex

    OK = primaryDoc.Save(PDSaveFull, FilePaths(1))
    Debug.Print "PRIMARYDOC SAVED PROPERLY: " & OK

    Set primaryDoc = Nothing
    app.Exit
    Set app = Nothing
    MsgBox "DONE"
End Sub