如何解决错误的 "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 弹出这个消息框。
注意事项:
- 有问题的工作簿实际上是关闭的 - 我知道它没有被其他人打开(我是唯一一个经常使用它的人,而且在里面的另一个人今天早上不在办公室) .
- 它声称文件被
'another user'
锁定,实际上是我。我经常可以通过关闭工作簿然后立即重新打开它来收到此警告。我不知道这是网络延迟问题(文件驻留在服务器上,而不是本地)还是什么,但在使用工作簿片刻后,我会收到 workbook is now available for read-write
消息。
- 每次 尝试执行设置
.SourceFullName
的行时,我都没有收到此警告。有时我会得到它的大部分时间,有时我根本不会得到它,有时我偶尔会得到它。
- 尽管我认为网络延迟,但无论我调试代码的速度有多快或多慢,我都会随机收到此消息。
- 在 OS 级别将新 或 旧工作簿标记为
Read-only
似乎并没有改善这种情况。
- 但是,标记 both 似乎每次执行替换行都会给我 2 个警告。
有人对如何解决这个问题有什么建议吗?
当 PPT 中的代码打开 PPTM 并且我的宏安全设置比 "Open any fool thing" 更严格时,我 运行 出现了奇怪的行为。尝试在 PPT 和 Excel 中调低宏的安全性,就像测试一样,看看是否可以消除问题。
如果有人知道一种即时设置安全选项并在之后重置它们的方法,那就更好了。在执行任何调用 XL 的操作之前,可以通过注册表执行此操作。
使用 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 弹出这个消息框。
注意事项:
- 有问题的工作簿实际上是关闭的 - 我知道它没有被其他人打开(我是唯一一个经常使用它的人,而且在里面的另一个人今天早上不在办公室) .
- 它声称文件被
'another user'
锁定,实际上是我。我经常可以通过关闭工作簿然后立即重新打开它来收到此警告。我不知道这是网络延迟问题(文件驻留在服务器上,而不是本地)还是什么,但在使用工作簿片刻后,我会收到workbook is now available for read-write
消息。 - 每次 尝试执行设置
.SourceFullName
的行时,我都没有收到此警告。有时我会得到它的大部分时间,有时我根本不会得到它,有时我偶尔会得到它。 - 尽管我认为网络延迟,但无论我调试代码的速度有多快或多慢,我都会随机收到此消息。
- 在 OS 级别将新 或 旧工作簿标记为
Read-only
似乎并没有改善这种情况。- 但是,标记 both 似乎每次执行替换行都会给我 2 个警告。
有人对如何解决这个问题有什么建议吗?
当 PPT 中的代码打开 PPTM 并且我的宏安全设置比 "Open any fool thing" 更严格时,我 运行 出现了奇怪的行为。尝试在 PPT 和 Excel 中调低宏的安全性,就像测试一样,看看是否可以消除问题。
如果有人知道一种即时设置安全选项并在之后重置它们的方法,那就更好了。在执行任何调用 XL 的操作之前,可以通过注册表执行此操作。