下标超出范围错误,因为没有 ReDim?

Subscript Out of Range Error because no ReDim?

不确定为什么会出现此错误。请协助更正,并说明原因。我有 3 个 sub(来自 2 个模块)按顺序相互调用。错误消息的原因是因为第一个子文件的文件名在第三个子文件中声明为变量吗?请参阅下面的代码:

模块 1:

Option Explicit

Sub PRM_1_Report_Save()
'
    Application.ScreenUpdating = False

    Dim PRM_1_New As Workbook ' This is BCRS-PTASKS Unassigned.csv
        Set PRM_1_New = Workbooks("BCRS-PTASKS Unassigned.csv")

    Dim SaveDir1 As String, prmAfn As String
    SaveDir1 = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\PRM Temp Files"
    If Len(Dir(SaveDir1, vbDirectory)) = 0 Then MkDir SaveDir1
    prmAfn = SaveDir1 & "\PRM_1_TEMP"
    Application.SendKeys ("~")
    PRM_1_New.SaveAs Filename:=prmAfn, FileFormat:=xlOpenXMLWorkbook

    PRM_1_New.Close False

    Call PRM_2_Report_Save

    Application.ScreenUpdating = True

End Sub

Sub PRM_2_Report_Save()
'
    Application.ScreenUpdating = False

    Dim PRM_2_New As Workbook ' This is Problem WGM & WGL xref with description.xls
        Set PRM_2_New = Workbooks("Problem WGM & WGL xref with description.xls")

    Dim SaveDir2 As String, prmBfn As String
    SaveDir2 = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\PRM Temp Files"
    If Len(Dir(SaveDir2, vbDirectory)) = 0 Then MkDir SaveDir2
    prmBfn = SaveDir2 & "\PRM_2_TEMP"
    Application.SendKeys ("~")
    PRM_2_New.SaveAs Filename:=prmBfn, FileFormat:=xlOpenXMLWorkbook

    PRM_2_New.Close False

    Application.ScreenUpdating = True

    Call Open_PRM_Files

End Sub

模块 2:

Option Explicit

Sub Open_PRM_Files()
'
    Application.ScreenUpdating = False

    Dim PRM_Dir As String
    Dim PRM_1_TEMP As Workbook
        Set PRM_1_TEMP = Workbooks("PRM_1_TEMP.xlsx") ' This is the line that get's the error
    Dim PRM_2_TEMP As Workbook
        Set PRM_2_TEMP = Workbooks("PRM_2_TEMP.xlsx")

        PRM_Dir = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\PRM Temp Files"

        Workbooks.Open Filename:=PRM_Dir & "\" & PRM_1_TEMP
        Workbooks.Open Filename:=PRM_Dir & "\" & PRM_2_TEMP

    Application.ScreenUpdating = True

End Sub

Module2 子程序中的这一行是调试器显示错误的地方(在上面的子程序中也有注释):

Set PRM_1_TEMP = Workbooks("PRM_1_TEMP.xlsx")

此处代码的目的是将两个导入的报表保存为.xlsx 格式,关闭它们,然后以保存的格式打开文件。对于此处未列出(或相关)的此 VBA 项目的其他工作流程,我需要在单独的子程序(保存和打开)中进行此操作。

编辑:我还应该提到前两个子程序执行并提供预期结果,即每个文件保存在新目录中并具有适当的扩展名。

Set PRM_1_TEMP = Workbooks("PRM_1_TEMP.xlsx")

此行假设您已经有一个打开的同名工作簿。如果 Excel 没有找到具有该名称的打开的工作簿,那么您将收到运行时错误。

我假设您正在尝试打开您在前两个子目录中创建的工作簿:

    Workbooks.Open Filename:=PRM_Dir & "\" & PRM_1_TEMP
    Workbooks.Open Filename:=PRM_Dir & "\" & PRM_2_TEMP

"& PRM_1_TEMP" 是工作簿变量的名称,您正试图将其连接为字符串名称。将其更改为与文件名匹配的字符串,然后将您的工作簿声明移至打开工作簿的代码下方。这样 Excel 在尝试访问 Workbooks 集合中的工作簿之前打开工作簿,您应该不会收到错误。我还没有测试过这个修改,但如果它对你有用,请告诉我。

Sub Open_PRM_Files()

    Application.ScreenUpdating = False

    Dim PRM_Dir As String

    PRM_Dir = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") & "\PRM Temp Files"

    Workbooks.Open Filename:=PRM_Dir & "\" & "PRM_1_TEMP"
    Workbooks.Open Filename:=PRM_Dir & "\" & "PRM_2_TEMP"

    Dim PRM_1_TEMP As Workbook
    Set PRM_1_TEMP = Workbooks("PRM_1_TEMP.xlsx") ' This is the line that get's the error
    Dim PRM_2_TEMP As Workbook
    Set PRM_2_TEMP = Workbooks("PRM_2_TEMP.xlsx")
    Application.ScreenUpdating = True

End Sub