【问题标题】:excel vba saveasui file pathexcel vba saveasui 文件路径
【发布时间】:2017-04-29 01:58:25
【问题描述】:

我创建了一个用于注册更改的模板。这些是过程中的请求和进一步的管理。我在这个模板中有一个代码,可以将文件保存为启用了 excel 宏的工作簿。这段代码的问题是我无法定义一个特定的文件夹来保存文档。在所有情况下,都会弹出另存为对话框,用户必须能够定义自己的文件名。我想为所有用户定义路径。有谁知道如何在这个宏中添加文件位置(路径)以使其工作?

    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.

【问题讨论】:

  • 如果你想强制他们使用你的路径,并且只允许他们提供文件名,为什么要使用 GetSaveAsFilename 对话框 - 只需使用 InputBox 并要求他们提供文件名(然后将您的固定路径添加到他们提供的任何内容)?或者,如果您想使用GetSaveAsFilename 以便他们可以单击现有文件名而不是输入它,您可以去掉FileNameVal 的路径部分并放入您自己的路径,或者您可以让用户保留选择文件名,直到路径与您所需的路径匹配。
  • 我使用的文件名是 yymmdd-followup,如 161214-1,2016 年 12 月 14 日,后续编号为 1。使用另存为对话框,他们始终必须检查可用的后续编号特定文件夹。如果不检查文件夹,就无法定义正确的名称。所以我现在拥有的是弹出的另存为框,并且文档设置为启用宏的工作簿。我只需要指定的路径。或者是否可以使用正确的后续编号自动创建文件名(检查文件夹)。在这种情况下,我可以使用它。但我可能需要一些帮助或提示..

标签: excel vba


【解决方案1】:

如果你想生成一个唯一的文件名,你可以使用类似下面的函数:

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

【讨论】:

  • 感谢您的帮助。这几乎完美无缺。当我在文档中按保存时,我仍然需要单击随机地图(文件夹)。选择随机地图后,它会自动在正确的文件夹中生成带有后续的特定文件名。
  • @RemcoH。 - 不显示对话框,只需将文件保存到您想要的位置。 (见编辑)
  • 这又产生了一个问题。保存文件将自动生成一个新号码。例如,我编辑了文档 161214-3 并尝试保存它,它会自动创建一个新编号 (161214-4)。模板必须创建新编号,但编辑现有文档不应在保存后更改名称。这么近!
  • @RemcoH。在我之前提到的编辑之后,我很快再次编辑它以将If SaveAsUI Then 放回原处(如果您希望它每次都生成一个新数字,请添加注释以摆脱If)。检查以确保您正在查看最新的编辑。因此,对于我的测试,如果我执行了“另存为”,它最终会更新数字,但使用“保存”保持数字不变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-14
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 1970-01-01
相关资源
最近更新 更多