如何解决错误的 "spreadsheet locked for editing" 问题?

How do I resolve a false "spreadsheet locked for editing" issue?

使用 Office 2010 套件,我有一个 PowerPoint 演示文稿,其中所有图表都链接到 Excel 工作簿。为了将演示文稿 and/or 工作簿移动到另一个目录,必须更新所有链接以指向新的工作簿位置。为此,我编写了以下位于 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) 行时,我经常从 Excel 弹出这个消息框。

注意事项:

  1. 有问题的工作簿实际上是关闭的 - 我知道它没有被其他人打开(我是唯一一个经常使用它的人,而且在里面的另一个人今天早上不在办公室) .
  2. 它声称文件被 'another user' 锁定,实际上是我。我经常可以通过关闭工作簿然后立即重新打开它来收到此警告。我不知道这是网络延迟问题(文件驻留在服务器上,而不是本地)还是什么,但在使用工作簿片刻后,我会收到 workbook is now available for read-write 消息。
  3. 每次 尝试执行设置.SourceFullName 的行时,我都没有收到此警告。有时我会得到它的大部分时间,有时我根本不会得到它,有时我偶尔会得到它。
  4. 尽管我认为网络延迟,但无论我调试代码的速度有多快或多慢,我都会随机收到此消息。
  5. 在 OS 级别将新 旧工作簿标记为 Read-only 似乎并没有改善这种情况。
    • 但是,标记 both 似乎每次执行替换行都会给我 2 个警告。

有人对如何解决这个问题有什么建议吗?

当 PPT 中的代码打开 PPTM 并且我的宏安全设置比 "Open any fool thing" 更严格时,我 运行 出现了奇怪的行为。尝试在 PPT 和 Excel 中调低宏的安全性,就像测试一样,看看是否可以消除问题。

如果有人知道一种即时设置安全选项并在之后重置它们的方法,那就更好了。在执行任何调用 XL 的操作之前,可以通过注册表执行此操作。