在打开-VBA代码时覆盖excel工作簿

时间:2014-03-06 12:08:10

标签: vba excel-vba excel

有没有办法在使用vba代码打开excel文件时覆盖它?

2 个答案:

答案 0 :(得分:0)

我认为你无法覆盖打开的文件。这是一个Windows限制,据我所知,它是不可能的。

所以我想你必须用不同的名字保存它。

编辑:除非您是打开文件的人。 如果您通过VBA代码打开文件,则只需使用workbookname.save

答案 1 :(得分:0)

您可以覆盖以只读模式打开的文件。要实现这一点,您需要将文件的属性设置为只读(因此强制所有人打开它,使其以只读模式打开)。

这可以在Windows操作系统中更改(更改文件的属性),也可以使用SetAttr函数https://www.techonthenet.com/excel/formulas/setattr.php

通过VBA完成

根据我自己的实验,我得到了以下代码,您可以将其作为示例。假设您正在尝试将当前打开的工作簿的副本保存到strFileLocation,这是一个包含输出文件路径的字符串变量,该文件可能已存在,也可能不存在:

' Verify that the file exists.
If Dir(strFileLocation) <> vbNullString Then
    ' For some reason the read only flag needs to be removed for VBA to be able to overwrite the file.
    SetAttr strFileLocation, vbNormal
End If
' Do the actual (over)writing
ThisWorkbook.SaveCopyAs strFileLocation
' Set the read only flag once more
SetAttr strFileLocation, vbReadOnly

```