场景
我有一个文件,使用以下代码将其作为ReadOnly打开。
Set wbRead = Workbooks.Open(FilePath, ReadOnly:=True)
FilePath是一个变量,用于指示该文件的文件位置
问题
我面临的问题是,如果用户第二次运行宏而没有关闭此已打开的只读文件,则由于打开了类似的文件名,这会导致运行时错误
我需要的
有什么方法可以使excel以只读方式打开文件,但是打开的文件显示随机名称吗? 例如:实际文件名是A。但是当excel以只读方式打开它时,它以A123打开吗? 123就像一个随机数。
答案 0 :(得分:2)
另一种解决方案是始终(打开或不打开)使用Workbooks.Add
创建文件的新副本。关闭时,Excel会自动提示您使用新名称保存:
Set wbRead = Workbooks.Add(FilePath)
答案 1 :(得分:0)
如果该文件已经打开,请使用其他名称在temp文件夹中进行复制,然后从那里打开它。
Sub OpenFile()
Const fPath As String = "C:\users\tim\desktop\tmp.xlsm"
Dim fso, wb As Workbook, fName, p
Set fso = CreateObject("scripting.filesystemobject")
p = fPath
fName = fso.getfilename(p)
On Error Resume Next
Set wb = Workbooks(fName)
On Error GoTo 0
If Not wb Is Nothing Then
p = fso.GetSpecialFolder(2) & "\" & Round(Rnd() * 1000, 0) & "_" & fName
fso.copyfile fPath, p
End If
Workbooks.Open p
End Sub