如果已经打开,请通过双击防止重新打开工作簿

Posted

技术标签:

【中文标题】如果已经打开,请通过双击防止重新打开工作簿【英文标题】:Prevent reopening workbook by double clicking if already open 【发布时间】:2016-08-05 08:30:55 【问题描述】:

我想阻止打开已经打开的工作簿。 我的工作簿包含 VBA 用户表单。

通过双击存储在特定位置的工作簿图标触发重新打开工作簿的事件,并且之前打开并运行了相同的文件并运行 VBA 用户窗体。

我尝试了以下代码,但它无法帮助我阻止重新打开。

Private Sub Workbook_Open()
    If ThisWorkbook.IsInplace = True Then
        MsgBox "Workbook Already Open"
        ThisWorkbook.Close (False)
    Else
        MsgBox "Single Instance Open"
    End If
End Sub

预期输出: 当我在文件已经打开的情况下双击 excel 文件时,理想情况下它应该什么都不做(或者它可以覆盖工作簿)

实际输出: 当我在文件已经打开的情况下双击excel文件时,它会弹出对话框“文件已经打开,重新打开文件将放弃更改”,带有yes,no和cancel选项。

【问题讨论】:

"双击存储在特定位置的工作簿图标":你的意思是你有一些GetOpenFilename() 方法正在运行或类似的吗? 【参考方案1】:

实际输出:当我在文件已经打开的情况下双击excel文件时,它会弹出对话框“文件已经打开,重新打开文件将放弃更改”,带有yes,no和cancel选项。

这是默认行为,AFAIK 无法更改。而且它不应该那么好。至少通过这种方式您知道工作簿已经打开并且您可以选择单击No。如果您仍然单击Yes,请触发警报,那么您不能为此责备系统。你可以吗? ;)

想象一下,如果你确实设法得到了你想要的东西,那么如果用户不知道你做了什么,就会认为鼠标不工作或者 Excel 应用程序有问题。为什么要把事情复杂化???

【讨论】:

我正在开发报价生成工具,所以每当用户双击打开工作簿时,都会调用 Userform,并且我使用了 Application.Visible = False 以便用户看不到 Excel 表格,所以用户唯一可以访问的是表格,而不是 Excel 表格。但是如果用户不知道工作簿已经打开,并且如果用户双击工作簿再次打开它,那么“文件已经打开”对话框将打开,并且由于这个对话框,用户可以看到 Excel 工作表。 你没有抓住重点......“你会收到警报”。您可以选择点击“否” 如果用户不知道工作簿已打开并且用户双击工作簿将其打开,它将使工作表与表单一起出现,而我只想保持可见的是表单而不是工作表,“文件已打开”对话框提示不是实际问题,但使工作表可见是我不想要的。因此使用此对话框阻止工作表出现在桌面上的任何方法。

以上是关于如果已经打开,请通过双击防止重新打开工作簿的主要内容,如果未能解决你的问题,请参考以下文章

我可以在打开的工作簿上编译 VBA 吗?

VBA编程14.操作工作簿对象

VBA 无法识别我已经打开的工作簿

VBA 打开工作簿错误?

用VBA代码打开其他excel工作簿(有打开密码的)???

请参阅其他工作簿中的 UDF 参数说明