有没有办法在使用vba代码打开excel文件时覆盖它?
答案 0 :(得分:0)
我认为你无法覆盖打开的文件。这是一个Windows限制,据我所知,它是不可能的。
所以我想你必须用不同的名字保存它。
编辑:除非您是打开文件的人。 如果您通过VBA代码打开文件,则只需使用workbookname.save
答案 1 :(得分:0)
您可以覆盖以只读模式打开的文件。要实现这一点,您需要将文件的属性设置为只读(因此强制所有人打开它,使其以只读模式打开)。
这可以在Windows操作系统中更改(更改文件的属性),也可以使用SetAttr
函数https://www.techonthenet.com/excel/formulas/setattr.php
根据我自己的实验,我得到了以下代码,您可以将其作为示例。假设您正在尝试将当前打开的工作簿的副本保存到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
```