在不保存工作簿的情况下更改 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 仍然是默认驱动器:
编辑:
关于保存的手动控制,您可以将ChDir
与Application.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 中的默认另存为位置的主要内容,如果未能解决你的问题,请参考以下文章
如何在不提示保存的情况下使用 Windows“X”关闭 Excel 工作簿