在不保存工作簿的情况下更改 Excel 中的默认另存为位置

Posted

技术标签:

【中文标题】在不保存工作簿的情况下更改 Excel 中的默认另存为位置【英文标题】:Changing the default save as location in excel without saving the workbook 【发布时间】:2014-10-20 10:59:12 【问题描述】:

我有一个工作簿,我正在从另一张工作表创建以检查是否需要对仪器进行校准。如果不需要校准,则不需要保存校准测试表,理想情况下也不应保存。

如果需要校准,我需要将校准表保存到特定文件夹。

我想要的是一个设置 saveas 位置的脚本,因此如果用户想要保存文件,那么它将在正确的位置打开,允许手动控制保存,可能在 10 或 20 分钟后(例如由通常的触发文件>另存为方法)。这意味着我不想在宏中保存。抱歉,如果最初不清楚。

我找不到执行此操作的任何函数,Application.DefaultFilePath = savelocation 不起作用,因为我正在打开现有模板,因此默认位置始终是现有模板。

我在我的工作簿中运行了 ChDir,然后转到文件>另存为,它没有任何更改,它仍然打开保存当前(主)文件的文件夹。 Application.GetSaveAsFileName() 对我没有用,因为我知道它的保存位置以及我想要保存它的位置,我只是不想导航到那里并冒险保存到错误的文件夹。

【问题讨论】:

见this SO link 您是否查看过 Application.GetSaveAsFileName() 函数? InitialFilename 参数应允许您指定默认路径。 @Siddharth 你能解释一下为什么它不是重复的吗? @ShadowWizard:当然 :) 这个问题不是关于保存文件,而是设置默认路径。阅读我的答案中的前 3 行。上面给出的链接是关于使用 saveas 保存文件的。 感谢@SiddharthRout。 【参考方案1】:

我从您的查询中了解到(您的问题标题也暗示了这一点)是您不想保存但设置了默认路径。只有当用户想要保存时,它才应该保存在该目录中。如果我的理解是正确的,那么您必须使用ChDir() 设置路径

例如

ChDir "D:\TMP"    

更多来自 Excel 的帮助

ChDir 声明

更改当前目录或文件夹。

语法

ChDir 路径

所需的路径参数是一个字符串表达式,用于标识哪个目录或文件夹成为新的默认目录或文件夹。该路径可能包括驱动器。如果未指定驱动器,ChDir 会更改当前驱动器上的默认目录或文件夹。

备注

ChDir 语句更改默认目录但不更改默认驱动器。例如,如果默认驱动器是 C,则以下语句会更改驱动器 D 上的默认目录,但 C 仍然是默认驱动器:

编辑

关于保存的手动控制,您可以将ChDirApplication.GetSaveAsFileName 组合在一起,就像上面 cmets 中提到的 Dave 一样。

评论跟进

这是我尝试过的,它有效。

Sub Sample()
    ChDir "C:\Temp"

    ret = Application.GetSaveAsFilename( _
    fileFilter:="Excel Files (*.xlsx), *.xlsx")
End Sub

即使我这样做了

Sub Sample()
    ChDir "C:\Temp"
End Sub

然后手动尝试使用File-SaveAs 保存它,它会在我指定的文件夹中打开。

更多关注

在聊天中讨论并使用 teamviewer 后,我们意识到问题出在网络路径上,因此替代方案是取消 SaveAs 并在类模块中重新编写我们自己的。

Option Explicit

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim ret

    ChDrive "O"
    ChDir "O:\AQS\03 AQS Customers\Calibration Check\Temp"


    If SaveAsUI = True Then
        Cancel = True
        ret = Application.GetSaveAsFilename(fileFilter:="Excel Files (*.xls*), *.xls*")
        '
        '~~> Rest of the code to save the file
        '
    End If
End Sub

【讨论】:

我已经尝试过了,它并没有改变任何东西。让我试着澄清一下我需要执行的操作的最后一部分 我运行了命令(到一个存在的文件夹),然后在退出使用“文件>另存为”的子之前,它仍然打开了文件的现有位置 就像我说的,上面的代码是经过试验和测试的。我希望你不是试图改变驱动器?见Remarks 我没有对任何人投反对票!您的 cmets 总是非常有帮助。 Sub test() ChDrive "C" ChDir "C:\Maconomy" End Sub 我逐步执行此操作,然后单击另存为现有打开的工作簿。被打开会负责吗? 哦,我以为你做到了:D【参考方案2】:

这对我有用:

Sub SaveWorkbookToDifferentDirectoryWithoutChangingFilename()

ChDrive "Y"

ChDir "Y:\Existing File Name"

ActiveWorkbook.SaveAs

End Sub

【讨论】:

以上是关于在不保存工作簿的情况下更改 Excel 中的默认另存为位置的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel VBA 中使用表单另存为位置保存工作表

如何在不提示保存的情况下使用 Windows“X”关闭 Excel 工作簿

在Excel中创建工作簿的默认名称是 excel是电子表格软件

让用户选择保存 Excel 工作簿的位置

公式中另一个工作簿的不匹配的Vlookup数据

尝试将桌面上的工作簿的工作表 2 保存为 CSV