2015-12-01 68 views
1

第一次發佈所以請善待。需要在宏中間手動打開excel文件

從模板文件,我運行一個宏創建一個新的文件夾,在它的模板文件的副本。然後我重新命名並更新它。有一次,我需要手動從網站上下載文件並打開它,然後啓動另一個宏來完成更新。

我最初試圖做到這一點從一個獨特的宏觀,但我得到的問題,宏將繼續運行Excel文件來得及打開之前。

我現在已經在2分割我的宏在第一次宏觀結束,我稱之爲有指令的用戶窗體,並繼續按鈕。這個想法是,我會在用戶窗體打開時下載文件,並在打開文件時點擊「繼續」。

由於某種原因,文件根本無法打開。看起來好像用戶窗體或宏停止打開文件。不過,如果我使用調試功能運行它,它工作正常...

Public strSN As String, strPart As String, strPath As String 


Sub create_new() 


' Create Folder if it doesn't exist 
'Dim strSN As String, strPart As String, strPath As String 

'strSN = SerialNumber.Value 
'strPart = PartNumber.Value 
'strPath = "M:\Quality\QUALITY ASSURANCE\DOC\Rental Folder\Scanned MRB's\" 

' close userform 
welcomeform.Hide 

'set Microsoft scription runtime reference to allow creation of folder macro 

On Error Resume Next 
ThisWorkbook.VBProject.References.AddFromGUID "{420B2830-E718-11CF-893D- 00A0C9054228}", 1, 0 
On Error GoTo 0 

If Not FolderExists(strSN) Then 
'Serial Number folder doesn't exist, so create full path 
FolderCreate strPath & strSN 

End If 

' Create new file in new folder 

On Error Resume Next 

ActiveWorkbook.SaveCopyAs Filename:=strPath & strSN & "\" & strPart & " " & strSN & " " & "SNR.xlsm" 

If Err.Number <> 0 Then 
    MsgBox "Copy error: " & strPath & "TEMPLATE SNR.xlsm" 
End If 
On Error GoTo 0 

' open new file without showing it or opening macros 

Application.EnableEvents = False 'disable Events 
Workbooks.Open Filename:=strPath & strSN & "\" & strPart & " " & strSN & " " & "SNR.xlsm" 
Application.EnableEvents = True 'enable Events 

' Modify serial number and part number in traceability summary form 

Sheets("Traceability Summary Form").Activate 
Sheets("Traceability Summary Form").Unprotect 
Range("A7").Value = strSN 
Range("C7").Value = strPart 

' update file with ITP 

Call Download_itp 

End Sub 

Sub Download_itp() 

downloaditp.Show 

End Sub 

在download_itp窗體:

Sub update_traceable_items() 
' 
' Macro to update the SNR tab with the traceable items from the ITP 
' 

downloaditp.Hide 


' copy ITP in file 

Application.ActiveProtectedViewWindow.Edit 
ActiveSheet.Name = "ITP" 
ActiveSheet.Copy after:=Workbooks(strPart & " " & strSN & " " & "SNR.xlsm").Sheets("SNR template") 

Sub continue_Click() 

Call update_traceable_items 

End Sub 

然後第二個宏與代碼開始

任何幫助,將不勝感激! 感謝

+0

試試'application.wait'而不是userform? – findwindow

+2

你*有*手動下載文件?這是可能的(對於大多數文件我相信)有VBA下載文件X到文件夾Y. – BruceWayne

+0

@findwindow,我試過'application.wait'之前,它沒有工作。 – charlotteF

回答

1

用戶窗體被模態顯示,這可能會阻止您「打開」最近下載的文件。當用戶窗體以模態方式顯示時,用戶被阻止與Excel應用程序中不是用戶窗體本身的任何部分「交互」 - 因此您無法選擇單元格或工作表,無法打開文件或關閉文件等。

這是用戶窗體的默認行爲,幸好沒有爲.Show方法可選參數,它允許您顯示形式爲「無模式」:

downloaditp.Show vbModeless 

這可以讓你用Excel應用程序進行交互而表格是開放的。

注:如果該文件是一個共享的網絡位置,你也許可以處理使用FileDialog對象這更好的,讓你「瀏覽」,以文件的位置,並打開它,內的所有你的主要程序的範圍,如:

With Application.FileDialog(msoFileDialogFilePicker) 
    .AllowMultiSelect = False 
    .Show 

    If .SelectedItems.Count <> 1 Then 
     MsgBox "No file selected!", vbCritical 
     Exit Sub 
    Else 
     Dim NewWorkbook as Workbook 
     Set NewWorkbook = Workbooks.Open(.SelectedItems(0)) 
    End If 
End With 
+0

什麼是'downloaditp'?用戶名稱? 'downloaditp'在哪裏申報? (我不熟悉用戶表單,所以它可能是一個簡單的答案,我只是缺少)。 – BruceWayne

+1

@BruceWayne我認爲這是用戶表單名稱,因爲OP使用它的'.Show'方法(UserForm對象)。它不會被聲明,它是在VBE設計器中構建的,您可以在其中設置'.Name'屬性。 –

+0

哎呀,謝謝! – BruceWayne

相關問題