如何使用excel vba打开只读的excel文件但以不同的文件名打开

时间:2018-10-15 01:53:02

标签: excel vba excel-vba

场景

我有一个文件,使用以下代码将其作为ReadOnly打开。

Set wbRead = Workbooks.Open(FilePath, ReadOnly:=True)

FilePath是一个变量,用于指示该文件的文件位置

问题

我面临的问题是,如果用户第二次运行宏而没有关闭此已打开的只读文件,则由于打开了类似的文件名,这会导致运行时错误

我需要的

有什么方法可以使excel以只读方式打开文件,但是打开的文件显示随机名称吗? 例如:实际文件名是A。但是当excel以只读方式打开它时,它以A123打开吗? 123就像一个随机数。

2 个答案:

答案 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