2016-12-13 266 views
1

我已經創建了一個用於註冊更改的模板。這些是要求和進一步的管理。我在這個模板中有一個代碼將文件保存爲一個啓用了excel宏的工作簿。此代碼的問題是我無法定義特定的文件夾來保存文檔。在所有情況下,彈出「另存爲」對話框,用戶必須能夠定義他們自己的文件名。我想爲所有用戶定義路徑。有誰知道如何在這個宏中添加一個文件位置(路徑)以使其工作?excel vba saveasui文件路徑

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
Dim FileNameVal As String 
If SaveAsUI Then 
    FileNameVal = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm") 
    Cancel = True 
    If FileNameVal = "False" Then 'User pressed cancel 
     Exit Sub 
    End If 
    Application.EnableEvents = False 
     If Right(ThisWorkbook.Name, 5) <> ".xlsm" Then 
      ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled 
     Else 
      ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled 
     End If 
    Application.EnableEvents = True 
End If 
End Sub 

在此先感謝。

親切的問候, REMCO H.

+0

如果要強制他們使用你的路徑,並只允許他們給一個文件名,爲什麼要使用'GetSaveAsFilename'對話框在所有 - 只需使用一個'InputBox'的d要求他們提供文件名(然後將他們固定的路徑添加到他們提供的任何內容中)?或者,如果您想使用'GetSaveAsFilename',以便它們可以單擊現有文件名而不是鍵入它,則可以去掉FileNameVal的路徑部分並放入自己的路徑,或者可以讓用戶保留選擇文件名,直到路徑符合你所需的路徑。 – YowE3K

+0

我使用的文件名是yymmdd-followup,如2016年12月14日161214-1,後續編號爲1.隨着另存爲對話框,他們總是必須檢查特定文件夾中的可用後續編號。不檢查文件夾就無法定義正確的名稱。所以我現在所做的是彈出保存框,並將文檔設置爲啓用宏的工作簿。我只需要指定的路徑。或者是否可以使用正確的後續編號自動創建文件名(檢查文件夾)。在那種情況下,我可以用它來工作。但我可能需要一些幫助或提示。 –

回答

0

如果要生成一個唯一的文件名,你可以使用類似下面的功能:

Function NextFileName(basename As String) As String 
    Dim followup As Integer 
    Dim pathname As String 
    pathname = "C:\Temp\Temp\" ' Include the trailing path separator so that we don't have to do it later 
    followup = 1 
    Do 
     NextFileName = pathname & basename & "-" & followup & ".xlsm" 
     If Dir(NextFileName) = "" Then Exit Function 
     followup = followup + 1 
    Loop 
End Function 

然後你可以從你的主代碼調用它

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 
    Dim FileNameVal As String 
    If SaveAsUI Then ' <-- Exclude the IF statement if you want EVERY save to have a new follow up number 
         '  rather than just "Save As" saves 
     Application.EnableEvents = False 
     'Generate the filename 
     FileNameVal = NextFileName(Format(Now, "yymmdd")) 
     ThisWorkbook.SaveAs Filename:=FileNameVal, FileFormat:=xlOpenXMLWorkbookMacroEnabled 
     'Maybe advise the user that the save has happened, and where it went to 
     MsgBox "Spreadsheet saved as " & FileNameVal 
     Cancel = True 
     Application.EnableEvents = True 
    End If 
End Sub 
+0

謝謝你的幫助。這幾乎是完美無缺的。當我按下文件保存時,我仍然需要點擊隨機地圖(文件夾)。選擇隨機地圖後,它會自動生成特定的文件名,並在正確的文件夾中跟進。 –

+0

@RemcoH。 - 不要顯示對話框,只需將文件保存到您想要的位置。 (見編輯) – YowE3K

+0

這造成了另一個問題。保存文件將自動生成一個新號碼。例如,我編輯文檔161214-3,並試圖保存它,它會自動創建一個新的號碼(161214-4)。模板必須創建新數字,但編輯現有文檔不應在保存後更改名稱。很近! –