2015-10-29 102 views
0

我有一個VBA宏約20個模塊,它們在工作簿中創建單獨的電子表格。他們還將由宏的每個模塊創建的單個電子表格保存到共享驅動器上的特定文件夾中。選擇文件夾保存位置

這是幾行將電子表格保存到單獨文件夾的示例。

z = Format(DateTime.Now, "dd-MM-YYYY hhmm") 
wb.SaveAs "J:\AAAA\BBBB\CCCC\DDDD\mod1" & z & ".xlsx" 
Workbooks("mod1" & z & ".xlsx").Close savechanges:=True 

然而,由於該文件現在正在當中的多個用戶共享的,具有不同的功能,該用戶現在希望能夠以設置其中生成的電子表格將被保存的位置,單獨的基礎上。

我在尋找的是某種方式讓宏打開一個新窗口,並讓用戶選擇一個文件路徑。然後將該文件路徑存儲到宏中,以便每個模塊都可以讀取需要存儲的文件位置。

這可能嗎?

編輯1:

我應該提出一些更清楚的事情。我很抱歉。

上面的代碼被複制到每個模塊中。而且,所有模塊都從一個總體模塊運行,即調用另一個模塊。

我在找的是一個代碼,它允許用戶在總體模塊開始時選擇保存位置。例如。 J□\ AAA \ CCC \ XXX。模塊在被調用時將檢索文件路徑,然後將文件保存到該位置。

回答

2

使用此功能:

Function GetFolder() As String 
Dim fldr As FileDialog 
Dim sItem As String 
Set fldr = Application.FileDialog(msoFileDialogFolderPicker) 
With fldr 
    .Title = "Select a Folder" 
    .AllowMultiSelect = False 
    '.InitialFileName = strPath 
    If .Show <> -1 Then GoTo NextCode 
    sItem = .SelectedItems(1) 
End With 
NextCode: 
GetFolder = sItem 
Set fldr = Nothing 
End Function 

,如果你想擁有他們選擇一個文件名返回FOLDERPATH

+0

感謝您的代碼。但是,我只需要它返回文件夾路徑的字符串,而不是它似乎要求的文件名。文件名取決於電子表格以及正在運行的單個宏。 – Clauric

+0

用'msoFileDialogFolderPicker'交換'msoFildeDialogSaveAs' – psychicebola

+0

感謝您的幫助。完美工作 – Clauric

0

,您可以使用此功能。它會提示用戶輸入文件夾位置和文件名。該函數返回絕對文件路徑。如果用戶取消對話框,它將返回vbNullString

Public Function SaveWorkbook() As String 

    Dim fileName As Variant 

    fileName = Application.GetSaveAsFilename(fileFilter:="Excel Workbook (*.xlsx), *.xlsx") 

    If fileName <> False Then Exit SaveWorkbook = fileName 

End Sub 
+0

感謝您的代碼。但是,我只需要它返回文件夾路徑的字符串,而不是文件名。文件名取決於電子表格以及正在運行的單個宏。 – Clauric

相關問題