Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改excel中的默认另存为位置而不保存工作簿_Excel_Vba - Fatal编程技术网

更改excel中的默认另存为位置而不保存工作簿

更改excel中的默认另存为位置而不保存工作簿,excel,vba,Excel,Vba,我有一个工作簿,我正在从另一张纸上创建,用于检查仪器是否需要校准。如果不需要校准,则无需保存校准测试表,理想情况下不应保存 如果需要校准,则我需要将校准表保存到特定文件夹中 我想要的是一个脚本,它设置了saveas位置,因此如果用户想要保存文件,那么它将在正确的位置打开,允许手动控制保存,可能在10或20分钟后,例如由通常的file>save-As方法触发。这意味着我不想在宏中保存。很抱歉,如果最初不清楚 我找不到任何函数来执行此操作,Application.DefaultFilePath=sa

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

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

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

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


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

我从您的查询(也是您的问题标题)中了解到,您不想保存,而是设置了默认路径。仅当用户希望保存时,才应将其保存在该目录中。如果我的理解是正确的,那么您必须使用ChDir设置路径

比如说

ChDir "D:\TMP"    
更多来自Excel的帮助

ChDir声明

更改当前目录或文件夹

语法

ChDir路径

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

评论

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

编辑:

关于手动控制保存,您可以将ChDir与上面评论中提到的Application.GetSaveAsFileName合并

评论的后续行动

这就是我尝试过的,而且很有效

Sub Sample()
    ChDir "C:\Temp"

    ret = Application.GetSaveAsFilename( _
    fileFilter:="Excel Files (*.xlsx), *.xlsx")
End Sub
即使我这样做了

Sub Sample()
    ChDir "C:\Temp"
End Sub
然后手动尝试使用文件另存为保存它,它将在我指定的文件夹中打开

更多后续行动

在聊天室中讨论并使用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
这对我很有用:

Sub SaveWorkbookToDifferentDirectoryWithoutChangingFilename()

ChDrive "Y"

ChDir "Y:\Existing File Name"

ActiveWorkbook.SaveAs

End Sub

请参阅Application.GetSaveAsFileName函数的详细信息?InitialFilename参数应该允许您指定默认路径。@Siddharth您能解释一下为什么它不是重复的吗?@ShadowWizard:当然:这个问题不是关于保存文件,而是设置默认路径。读我答案的前三行。上面给出的链接是关于使用saveas保存文件的。谢谢@SiddharthRout。我已经尝试过了,它没有改变任何东西。让我试着澄清我需要执行的操作的最后一部分。我将命令运行到一个存在的文件夹,然后在退出子使用的文件>另存为之前,它仍然打开了文件的现有位置,就像我说的,上面的代码经过了尝试和测试。我希望你没有试图改变驱动器?看到了吗?我没有投任何人的反对票!你的评论总是很有帮助的。子测试ChDrive C ChDir C:\Maconomy End Sub I逐步完成此操作,然后在现有打开的工作簿中单击另存为。它被打开会有责任吗?哦,我以为你有责任:D