我每次保存文件时都试图保存共享excel文件的版本。我希望文件不共享,没有VBA宏。我目前使用的代码如下:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim x As String, y As String, z As String
x = "Enable Autosave"
y = Now()
z = "C:\Users\.....\MTMtest-" & Format(y, "mm-dd-yy hhmm") & ".xls"
If Sheet3.Cells(1, 5).Value = x Or Sheet4.Cells(1, 5).Value = x Or Sheet5.Cells(1, 5).Value = x Or Sheet6.Cells(1, 5).Value = x Then
ActiveWorkbook.SaveCopyAs (z)
If ActiveWorkbook.MultiUserEditing Then
Application.Workbooks.Open (z)
Workbooks("MTMtest-" & Format(y, "mm-dd-yy hhmm") & ".xls").Activate
ActiveWorkbook.ExclusiveAccess
ActiveWorkbook.Save
ActiveWorkbook.Close
End If
End If
End Sub
当我保存共享文件时,我会弹出一个问题,询问是否要从共享使用中删除工作簿。当我点击“是”时,我发出错误:运行时错误' 1004' Microsoft Excel无法访问该文件。单击“结束”会获取一个非共享副本,但它仍处于打开状态。
关闭副本并尝试关闭原始文件后,我收到错误:文件被锁定。这迫使我用任务管理器关闭原文。
我的问题是:如何让这个程序只保存当前工作簿的非宏,非共享副本?
答案 0 :(得分:0)
由于缺少更好的替代方法,您可以首先使用savecopyas方法将工作簿保存为Macroenabled工作簿 - 然后打开此副本并保存为macrofree工作簿,这要归功于saveas方法,并删除副本。
由于某些原因我无法正确表达,在此上下文中直接在原始工作簿上使用saveas方法似乎是一个问题 - 特别是这会触发原始工作簿在中间关闭BeforeSave事件之前和工作簿实际上有机会获得保存。我上面建议的中间复制是一种解决方法。
查看此代码,该代码适用于支持Open XML宏的工作簿 - 似乎在我的最终工作正常。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim wb As Workbook
ThisWorkbook.SaveCopyAs ThisWorkbook.Path & "\backup.xlsm"
Set wb = Workbooks.Open(ThisWorkbook.Path & "\backup.xlsm")
Application.DisplayAlerts = False
Application.EnableEvents = False
wb.SaveAs filename:=ThisWorkbook.Path & "\backup.xlsx", _
FileFormat:=xlOpenXMLWorkbook, AccessMode:=xlExclusive
Application.EnableEvents = True
Application.DisplayAlerts = True
wb.Close
Kill ThisWorkbook.Path & "\backup.xlsm"
End Sub