vba检查是否打开了只读工作簿

vba检查是否打开了只读工作簿,vba,save,readonly,Vba,Save,Readonly,对于只读工作簿是否打开,我似乎无法得到明确的反馈。在我的代码中,我在关闭/保存工作簿后将其复制。如果其他用户以只读方式打开只读工作簿,我希望能够覆盖该工作簿。我试过类似这样的代码,但没有运气,它只是不断地说“文件未打开!”即使在我打开它的时候。 如何检查vba中是否打开了“只读.xlsx”文件 Sub Test_If_File_Is_Open_2() Dim wBook As Workbook On Error Resume Next Set wBook = Workbooks("C:\U

对于只读工作簿是否打开,我似乎无法得到明确的反馈。在我的代码中,我在关闭/保存工作簿后将其复制。如果其他用户以只读方式打开只读工作簿,我希望能够覆盖该工作簿。我试过类似这样的代码,但没有运气,它只是不断地说“文件未打开!”即使在我打开它的时候。 如何检查vba中是否打开了“只读.xlsx”文件

Sub Test_If_File_Is_Open_2()

Dim wBook As Workbook

On Error Resume Next

Set wBook = Workbooks("C:\Users\" & Environ("username") & "\Documents\Dropbox\Systems\Open     Machine Schedule\Open Machine Schedule.xlsx")
If wBook Is Nothing Then 'Not open
MsgBox "File is Not open!"
Else 'It is open
MsgBox "File is Open!" 'Never get this to display when I have the excel file open

End If

End Sub
启动提示使用这段代码(如上)的原因是,如果只读工作簿由其他用户打开,我希望宏不会导致错误。运行下面的宏并在之前打开复制的只读工作簿时,出现错误:“vba运行时错误1004无法访问只读文档” 当复制的工作簿关闭时,我没有收到这个错误,它会像预期的那样覆盖它。 以下是提示此问题的代码:

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim backupfolder As String

backupfolder = "C:\Users\" & Environ("username") & "\Documents\Dropbox\Systems\Open Machine Schedule\"

ThisWorkbook.SaveAs Filename:=backupfolder & "Open Machine Schedule - Current.xlsx", FileFormat:=xlOpenXMLWorkbook
End Sub

Sub Auto_Save()

Dim savedate

savedate = Date

Dim savetime
savetime = Time
Dim formattime As String
formattime = Format(savetime, "hh.MM.ss")
Dim formatdate As String
formatdate = Format(savedate, "DD - MM - YYYY")


Application.DisplayAlerts = False

Dim backupfolder As String
backupfolder = "C:\Users\" & Environ("username") & "\Documents\Dropbox\Systems\Open Machine Schedule\"
ActiveWorkbook.Save
ActiveWorkbook.SaveAs backupfolder & "Open Machine Schedule - Current.xlsx", FileFormat:=xlOpenXMLWorkbook
SetAttr backupfolder & "Open Machine Schedule - Current.xlsx", vbReadOnly
Application.DisplayAlerts = True
MsgBox "Backup Run. Please Check at: " & backupfolder & " !"

End Sub

如果您有任何帮助/建议,我们将不胜感激。

您的第一个代码只是测试工作簿是否存在,而不是它的状态

您可以使用此选项:

If wBook.ReadOnly Then
    MsgBox "File is Read-only"
Else
    MsgBox "File is not read-only"
End If

我不想看它是否是只读的,我真的把它做成了只读版本。我知道这是一本只读工作簿。我想知道是否有其他人打开了它,因为当它被打开时,原始工作簿宏将不允许复制并覆盖复制的工作簿,直到它被关闭为止。@cheapkid1没有100%安全的方法“了解文件是否正在使用”,因为在您进行检查的几毫秒后,该文件可能不再使用,反之亦然。相反,您只需打开文件并使用它,如果没有例外,则无需学习。我只是测试用户在打开宏时不会出现错误,如果打开宏,则退出宏。我什么也不做,只是关闭工作簿,如果打开工作簿,就不复制。vba知道它被打开了,因为当我测试打开复制的工作簿并运行宏说它已打开且无法访问时,它给了我一个错误。下次保存原始工作簿和关闭复制的工作簿时(两者都必须发生)然后宏才会覆盖复制的工作簿。为了测试用户不会出现错误,需要VBA了解文件是否正在使用……正如我所说,无法100%知道文件是否正在使用。您最好的选择是让错误发生,并添加错误处理,以便在错误发生时执行您想要的操作。。。