无法使用VBA保存非共享版本的Excel工作簿

我试图保存一个共享excel文件的版本,每次保存文件。 我想要该文件被取消共享,并没有VBAmacros。 我目前使用的代码如下:

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 

当我保存共享文件时,会popup一个询问是否要从共享使用中删除工作簿。 当我点击是,我得到一个错误:运行时错误“1004”Microsoft Excel不能访问该文件。 点击结束让我一个非共享副本,但它仍然是开放的。

closures复制并尝试closures原始后,我得到错误:文件被locking。 这迫使我用任务pipe理器closures原来的。

我的问题是:我如何得到这个程序来保存我当前工作簿的非macros,非共享副本?

如果缺less更好的替代方法,则可以先用savecopyas方法将工作簿保存为Macroenabled工作簿 – 然后打开此副本,并使用saveas方法保存为macrofree工作簿,然后删除副本。

由于某些原因,我无法正确expression这似乎是一个问题,原来的工作簿直接在这种情况下使用saveas方法 – 特别是这触发原始工作簿在BeforeSave事件中间closures,工作簿实际上有机会得到保存。 我build议上面的中间副本是一个解决方法。

看看这个代码是从一个开放的XMLmacros启用工作簿 – 似乎在我的工作很好。

 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