2016-04-28 53 views
0

不知道爲什麼我得到這個錯誤。請協助糾正,併爲此提供一個很好的解釋。我有3個潛艇(來自2個模塊)相互呼叫。是錯誤消息的原因,因爲從第一個子文件名被聲明爲第三個子變量?請參見下面的代碼:下標超出範圍錯誤,因爲沒有ReDim?

模塊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 

這從在單詞數的副線,其中調試器顯示錯誤(其也評論在副上述):

Set PRM_1_TEMP = Workbooks("PRM_1_TEMP.xlsx") 

這裏的代碼的目的是將兩個導入的報告保存爲.xlsx格式,關閉他們,然後以保存的格式打開文件。我需要在獨立的子目錄(保存並打開)中執行此VBA項目的其他工作流程過程(未在此處列出(或相關))。

編輯:我還應該提到,前兩個潛艇執行並提供預期的結果,每個文件保存在新的目錄和適當的擴展名。

+0

嘗試'workbooks.open'instead,並測試Wb的已打開 –

回答

1
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 
+0

我想你的MOD的代碼,我得到一個編譯錯誤,指出變量(PRM_1_TEMP)沒有定義。我認爲這可能會發生,但無論如何都想嘗試。 –

+1

您確實注意到當您打開文件時,我在「PRM_1_TEMP」周圍添加了引號?在設置PRM_1_TEMP的行上是否存在此錯誤? – Swaffle

+0

對不起,錯過了引號。 –