Vba 需要在宏的中间手动打开Excel文件

Vba 需要在宏的中间手动打开Excel文件,vba,excel,Vba,Excel,第一次张贴,所以请友好 从模板文件中,我运行宏来创建一个新文件夹,其中包含模板文件的副本。然后我重命名它并更新它。有一次,我需要手动从网站下载一个文件并打开它,然后启动另一个宏来完成更新 我最初尝试从一个独特的宏执行此操作,但我遇到了一些问题,因为该宏将在excel文件打开之前继续运行 我现在已将宏拆分为2。在第一个宏的末尾,我调用了一个带有指令和continue按钮的userform。我的想法是在打开userform时下载文件,在打开文件时单击“continue” 由于某种原因,该文件根本无法

第一次张贴,所以请友好

从模板文件中,我运行宏来创建一个新文件夹,其中包含模板文件的副本。然后我重命名它并更新它。有一次,我需要手动从网站下载一个文件并打开它,然后启动另一个宏来完成更新

我最初尝试从一个独特的宏执行此操作,但我遇到了一些问题,因为该宏将在excel文件打开之前继续运行

我现在已将宏拆分为2。在第一个宏的末尾,我调用了一个带有指令和continue按钮的userform。我的想法是在打开userform时下载文件,在打开文件时单击“continue”

由于某种原因,该文件根本无法打开。似乎是userform或宏阻止了文件的打开。但是,如果我使用debug函数运行它,它可以正常工作

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
然后,第二个宏以代码开始:

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")
任何帮助都将不胜感激!
谢谢

用户表单正在以模式显示,这可能会阻止您“打开”最近下载的文件。当以模式显示UserForm时,将阻止用户与Excel应用程序中非UserForm本身的任何部分进行“交互”——因此您不能选择单元格或工作表,也不能打开或关闭文件等

这是UserForms的默认行为,但幸运的是,
.Show
方法有一个可选参数,允许您“无模式”显示表单:

这允许您在表单打开时与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
与Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect=False
显示
如果.SelectedItems.Count 1,则
MsgBox“未选择任何文件!”,vbCritical
出口接头
其他的
将新工作簿设置为工作簿
设置新工作簿=工作簿。打开(.SelectedItems(0))
如果结束
以

尝试
应用程序。等待
而不是用户表单?您必须手动下载文件吗?有可能(对于我相信的大多数文件)让VBA将文件X下载到文件夹Y。@findwindow,我之前尝试过“应用程序。等待”,但没有成功。哦,好吧^ ^蝙蝠侠的建议呢?哈哈!!尤里卡@大卫·泽蒙斯你是天才!成功了!什么是下载ITP?用户名?
downloadtp
在哪里声明?(我对userforms不太熟悉,所以这可能是一个简单的答案,我只是不知道)。@BruceWayne我假设这是userform名称,因为OP将其与(userform对象的)方法
.Show
一起使用。它不会被声明,它是在VBE设计器中构建的,您可以在那里设置它的
.Name
属性。
downloaditp.Show vbModeless
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