【发布时间】:2013-12-23 02:27:39
【问题描述】:
对于只读工作簿是否打开,我似乎无法获得明确的反馈。在我的代码中,我在关闭/保存工作簿后将其复制。如果只读工作簿被其他用户以只读方式打开,我希望能够覆盖该工作簿。我尝试了类似这段代码的东西,但没有运气,它只是一直说“文件未打开!”即使我打开它。 如何检查是否在 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
任何帮助/建议将不胜感激
【问题讨论】: