选择动态路径&提示在excel vba中保存文件

时间:2015-05-06 14:50:02

标签: excel excel-vba vba

您好我正在寻找上传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`

1 个答案:

答案 0 :(得分:0)

  1. 一切正常后,此代码块就很好了:
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    Application.ScreenUpdating = False但是,您的代码已完全调试,它将使您的生活成为一场噩梦。在这个过程按照你想要的方式运行之前,请注释那些。

  2. 您似乎声明了(Dim)您的一些变量,但并非全部。我强烈建议在所有代码模块的顶部添加Option Explicit以在使用之前强制进行变量声明 - 这有助于防止变量名称中的拼写错误导致事情变得混乱。

  3. 您从SelectedFiles分配Application.GetOpenFilename返回值,但不要使用它。分配后,您将拥有用户选择的文件名数组,并且它们将包含完整路径。这可能会提供您需要的路径信息(对话框将允许用户导航到所需的文件夹),但我不确定,因为......

  4. 您指定的strFilename = Dir(FolderLocation & "\*.xls", vbNormal)会为您提供位于*.xls的第一个FolderLocation文件。然后循环遍历那里的所有*.xls文件。

  5. 我建议您使用现有代码,从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现在将指向用户选择的目录,然后您可以使用他们选择的文件夹继续循环。