【发布时间】:2018-08-14 23:01:13
【问题描述】:
您好,我正在尝试使我的数组更加动态,以将所有文件路径包含在 G 列中。但是我很难做到这一点,因为每当我尝试类似 arrayFilePaths = Range("G4:G5") 或此处的任何解决方案时,我都会收到 subscript out of range,@ 987654321@
我在OK = primaryDoc.Open(arrayFilePaths(0)) 行收到type mismatch 或subscript out of range。
我的代码:
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
【问题讨论】:
-
添加
.Value这样 vba 不会尝试放入范围本身,而是放入数组中的值。 -
@ScottCraner ,仍然出现同样的错误,这是我的新行
arrayFilePaths = Range("G4:G5").Value -
@ScottCraner 没有
Set关键字,如果没有指定成员,它始终是类的默认属性:) -
用
arrayFilePaths = Range("G4:G5").Value设置数组的第一个位置可能是1而不是0 -
@ScottCraner 但是
arrayFilePaths = Range("G4:G5").Value生成一个二维数组,所以第一个元素实际上是arrayFilePaths(1, 1)或者你需要转置它。