2016-12-13 92 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)。模板必须创建新数字,但编辑现有文档不应在保存后更改名称。很近! –

相关问题