Excel SaveAs 更改活动工作簿 - 如何另存为并保持活动工作簿处于活动状态? [复制]

Posted

技术标签:

【中文标题】Excel SaveAs 更改活动工作簿 - 如何另存为并保持活动工作簿处于活动状态? [复制]【英文标题】:Excel SaveAs changes active workbook - How to SaveAs and keep active workbook active? [duplicate] 【发布时间】:2016-08-02 06:13:17 【问题描述】:

在 MS-Excel 2007 宏中,我想在开始更新之前将工作簿(包含宏)保存到另一个工作簿。但是,当我执行 SaveAs 时,当前工作簿成为保存的工作簿,而不是我盯着的原始工作簿......

假设我从工作簿“A.xlsm”开始,在工作簿“A.xlsm”中发出命令

With ActiveWorkbook
          .SaveAs FileName:=ThisWorkbook.Path + "\" & "B.xlsm"
          Close 0
End With

活动工作簿中的任何更改都出现在工作簿“B.xlsm”而不是“A.xlsm”中!!!

问题 在工作簿“A.xlsm”中,如何在不更改活动工作簿的情况下保存副本?

【问题讨论】:

Another Way @SiddharthRout 该帖子已被“翻新”。这是他更新原始文章时的 Wayback Machine 链接:web.archive.org/web/20131213230603/http://www.siddharthrout.com/… @AustinGordon Updated Link 【参考方案1】:

SaveCopyAs 保存工作簿的副本而不更改任何引用。

ActiveWorkbook.SaveCopyAs FileName:=ActiveWorkbook.Path + "\" & "B.xlsm"


Sub TestSaveAs()
    Dim xlWB As Workbook
    Set xlWB = ActiveWorkbook

    ActiveWorkbook.SaveCopyAs Filename:=ActiveWorkbook.Path + "\" & "B.xlsm"

    Debug.Print "ActiveWorkbook.FullName: " & ActiveWorkbook.FullName
    Debug.Print "xlWB.FullName: " & xlWB.FullName

End Sub

【讨论】:

我的理解是自动将活动工作簿更改为“Thisworkbook”。 @NoChance 我的回答有误。我包含了一个测试来表明 SaveCopyAs 不会更改任何引用。 非常感谢。恭喜你知道了这样的差异! 感谢您的勾选! 当之无愧。我认为在这种情况下 SaveAs 简直是有害的......它与 SQL DELETE FROM TableX 一样有害,它不要求条件!【参考方案2】:

创建一个工作簿变量并在保存之前为其分配ActiveWorkbook

Dim xlWB as Workbook
Set xlWB = ActiveWorkbook
xlWB.SaveAs FileName:=ThisWorkbook.Path & "/" & "B.xlsm"

然后您可以参考xlWB 而不是ActiveWorkbook,它始终保持相同的工作簿

【讨论】:

我认为这可行。我假设我可以执行 xlWB.Activate 以使其再次成为活动工作簿。如果它有效,我将测试并接受它作为答案。谢谢。 是的,您可以,或者在您需要的地方将ActiveWorkbook 替换为xlWB。那你就不用Activate来访问了

以上是关于Excel SaveAs 更改活动工作簿 - 如何另存为并保持活动工作簿处于活动状态? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

vba:以 xlsm 文件格式保存而不更改活动工作簿

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

VBA密码保护Excel工作簿而不保存

SaveAs期间如何保留原始工作簿

如何在打开的工作簿中禁用 SaveAs 但不禁用 Save

VBA保存活动工作簿获取方法错误