您好我正在寻找上传excel文件的动态路径,应该询问保存文件的位置。这是我的代码。我试过但它只采取静态路径。任何帮助将不胜感激。
'结合表格
Dim WorkbookDestination As Workbook
Dim WorkbookSource As Workbook
Dim WorksheetSource As Worksheet
Dim FolderLocation As String
Dim strFilename As String
Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False
'This line will need to be modified depending on location of source folder
FolderLocation = "U:\ECA" 'file location need to be dynamic
'Set the current directory to the the folder path.
ChDrive FolderLocation
ChDir FolderLocation
'Dialog box to determine which files to use. Use ctrl+a to select all files in folder.
SelectedFiles = Application.GetOpenFilename( _
filefilter:="Excel Files (*.xls*), *.xls*", MultiSelect:=True)
'Create a new workbook
Set WorkbookDestination = Workbooks.Add(xlWBATWorksheet)
strFilename = Dir(FolderLocation & "\*.xls", vbNormal) 'file name should be specified by user input and output file
'Iterate for each file in folder
If Len(strFilename) = 0 Then Exit Sub
Do Until strFilename = ""
Set WorkbookSource = Workbooks.Open(Filename:=FolderLocation & "\" & strFilename)
Set WorksheetSource = WorkbookSource.Worksheets(1)
WorksheetSource.Copy After:=WorkbookDestination.Worksheets(WorkbookDestination.Worksheets.Count)
WorkbookSource.Close False
strFilename = Dir()
Loop
WorkbookDestination.Worksheets(1).Delete
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=FolderLocation
Application.DisplayAlerts = True
Application.DisplayAlerts = True
Application.EnableEvents = True
Application.ScreenUpdating = True`
答案 0 :(得分:0)
一切正常后,此代码块就很好了:
Application.DisplayAlerts = False
Application.EnableEvents = False
Application.ScreenUpdating = False
但是,您的代码已完全调试,它将使您的生活成为一场噩梦。在这个过程按照你想要的方式运行之前,请注释那些。
您似乎声明了(Dim
)您的一些变量,但并非全部。我强烈建议在所有代码模块的顶部添加Option Explicit
以在使用之前强制进行变量声明 - 这有助于防止变量名称中的拼写错误导致事情变得混乱。
您从SelectedFiles
分配Application.GetOpenFilename
返回值,但不要使用它。分配后,您将拥有用户选择的文件名数组,并且它们将包含完整路径。这可能会提供您需要的路径信息(对话框将允许用户导航到所需的文件夹),但我不确定,因为......
您指定的strFilename = Dir(FolderLocation & "\*.xls", vbNormal)
会为您提供位于*.xls
的第一个FolderLocation
文件。然后循环遍历那里的所有*.xls
文件。
我建议您使用现有代码,从SelectedFiles
中提取路径信息,如下所示:
SelectedFiles = Application.GetOpenFilename( _
filefilter:="Excel Files (*.xls*), *.xls*", MultiSelect:=False)
If InStrRev(SelectedFiles, "\") > 0 Then
FolderLocation = Left(SelectedFiles, InStrRev(SelectedFiles, "\"))
End If
请注意,我更改了Multiselect:=False
以允许用户只选择一个文件 - 我没有看到您在其他地方使用此变量的位置,因此我将其修改为仅将其用作路径选择器。如果这不正确,您将不得不进行另一次修改以选择路径。否则,FolderLocation
现在将指向用户选择的目录,然后您可以使用他们选择的文件夹继续循环。