如何解决虚假的“电子表格被locking以进行编辑”问题?

使用Office 2010套件,我有一个PowerPoint演示文稿,所有图表链接到一个Excel工作簿。 为了将演示文稿和/或工作簿移动到另一个目录,必须更新所有链接以指向新的工作簿位置。 为此,我写了下面的代码驻留在PowerPoint中的标准代码模块中:

Private Sub RedirectLinks() Dim Source As String Dim Dest As String Dim Action As Integer If InStr(1, ActivePresentation.Path, "Dev\") > 1 Then Action = MsgBox("Changing pointers to PRODUCTION", vbOKCancel) Source = "Dev\" Dest = vbNull Else Action = MsgBox("Changing pointers to DEVELOPMENT", vbOKCancel) Source = "Templates\" Dest = "Dev\Templates\" End If If Action = vbOK Then Dim SL As Slide Dim SH As Shape Dim Top As Double Dim Left As Double Dim Width As Double Dim Height As Double For Each SL In ActivePresentation.Slides SL.Select For Each SH In SL.Shapes SH.Select If SH.Type = msoLinkedOLEObject Then 'when we find a linked one Top = SH.Top Left = SH.Left Width = SH.Width Height = SH.Height SH.LinkFormat.SourceFullName = Replace(SH.LinkFormat.SourceFullName, Source, Dest) SH.Top = Top SH.Left = Left SH.Height = Height SH.Width = Width End If Next Next End If If InStr(1, Dest, "dev") > 0 Then Action = MsgBox("About to OVER WRITE the Dev copy with this one." & vbCrLf & "Click 'Cancel' to prevent this and save manually", vbOKCancel, "OVER WRITE WARNING!!") Else Action = MsgBox("About to OVER WRITE the PRODUCTION copy with this one." & vbCrLf & "Click 'Cancel' to prevent this and save manually", vbOKCancel, "OVER WRITE WARNING!!") End If If Action = vbOK Then ActivePresentation.SaveAs Replace(ActivePresentation.Path, Source, Dest) & ActivePresentation.Name End If End Sub 

代码执行得很好,但是,当我执行SH.LinkFormat.SourceFullName = Replace(SH.LinkFormat.SourceFullName, Source, Dest)行时,我经常会从ExcelpopupExcel消息框。

Excel中使用错误

注意事项:

  1. 有问题的工作簿实际上是closures的 – 我知道其他任何人都没有打开(我是唯一一个经常使用它的人,而另一个人今天早上不在办公室)。
  2. 它声称该文件被'another user'locking,这实际上是我。 我经常可以通过closures工作簿来获得这个警告,然后立即重新打开它。 我不知道这是一个networking延迟问题(文件驻留在服务器上,而不是本地),或者是什么,但是在使用工作簿一会儿之后,我会让workbook is now available for read-write消息。
  3. 每次尝试执行设置.SourceFullName的行时,都不会收到此警告。 有时候,我会把它最多的时间,有时我不会得到它,有时我会有时间得到它。
  4. 尽pipe我有networking延迟的想法,但是通过代码debugging的速度和速度并不重要,随机的时候我会得到这个消息。
  5. 在操作系统级将新旧工作簿标记为Read-only并不能改善情况。
    • 但是,标记这两个似乎让我2警告每个replace行的执行。

有没有人有任何build议如何解决这个问题?

当PPT中的代码打开PPTM时,我遇到了奇怪的行为,而我的macros安全设置比“打开任何傻瓜的东西”更紧密。 尝试拨打PPT和Excel中的macros安全性尽可能低,只是作为一个testing,看看是否消除了这个问题。

如果有人知道如何设置安全选项并重置它们,那会更好。 在做任何可以调用XL的东西之前,可以通过registry来做到这一点。