下标超出范围错误,因为没有 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
不确定为什么会出现此错误。请协助更正,并说明原因。我有 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