C# 在其他用户已打开的共享驱动器上打开工作簿(或其他Office文档)

C# 在其他用户已打开的共享驱动器上打开工作簿(或其他Office文档),c#,vb.net,vba,excel,C#,Vb.net,Vba,Excel,假设共享网络驱动器上存在一个工作簿,该工作簿由用户a打开。如果用户B试图通过双击该文件来打开该文件,则会出现如下提示: 如果用户B尝试使用以下方式以编程方式(可能使用外接程序)打开工作簿: 到底发生了什么?是否出现上述提示?如果是,是否可以使用Application.DisplayAlerts=False?如果如上所示的工作簿.Open在这种情况下引发异常,我们是否需要使用ReadOnly参数重试,如下所示: Workbooks.Open("N:\path_to_workbook\workbo

假设共享网络驱动器上存在一个工作簿,该工作簿由用户a打开。如果用户B试图通过双击该文件来打开该文件,则会出现如下提示:

如果用户B尝试使用以下方式以编程方式(可能使用外接程序)打开工作簿:

到底发生了什么?是否出现上述提示?如果是,是否可以使用
Application.DisplayAlerts=False
?如果如上所示的
工作簿.Open
在这种情况下引发异常,我们是否需要使用ReadOnly参数重试,如下所示:

Workbooks.Open("N:\path_to_workbook\workbook.xlsx", ReadOnly:=True)
我读过其他帖子(包括)建议
工作簿。在第一个代码片段中打开
成功,工作簿以只读方式打开,尽管这并不十分清楚


不幸的是,我自己没有配置一个测试环境来复制这个场景,否则这将是显而易见的答案。

我在我们的网络驱动器环境上进行了测试,发现了以下问题。如果文件由用户A打开,并且用户B尝试使用
工作簿以编程方式打开文件。打开
,则结果将是文件的只读版本

如果希望控制只读文件的打开,可以使用以下代码示例将其关闭:

Sub Test()

Dim wb As Workbook

Set wb = Workbooks.Open("Path_To_Excel_File")
If wb.ReadOnly Then
    MsgBox "File already in use"
    wb.Close savechanges:=False
End If

End Sub

你没有测试环境吗?你不能在一个随机的excel文件中测试这个概念吗?
ReadOnly
参数应该起作用。即使关闭了
DisplayAlerts
,提示也会出现,并且会一直出现。如果包含
ReadOnly=True
,则会在没有提示的情况下打开工作簿。@ScottHoltzman,否,根据我的帖子,我没有包含共享网络驱动器和其他用户的测试环境。不可以,您不能在随机工作簿中测试这一点;请尝试在Windows资源管理器中双击已打开的工作簿。是的,ReadOnly参数肯定会起作用,但默认以只读方式打开工作簿是不可取的。@Iturner,如果这确实正确,请将其作为答案发布。我必须承认,我怀疑您在尝试以编程方式打开工作簿时是否会得到提示,但由于我自己无法测试它…您可以先运行检查以查看工作簿是否已打开,如果已打开,则打开它
ReadOnly
,如果可以接受,或者只是提醒用户工作簿已打开,目前无法使用。如果有帮助,请参阅本文了解更多信息:
Sub Test()

Dim wb As Workbook

Set wb = Workbooks.Open("Path_To_Excel_File")
If wb.ReadOnly Then
    MsgBox "File already in use"
    wb.Close savechanges:=False
End If

End Sub