【问题标题】:Excel VBA open same workbook twice, but one instance is read-onlyExcel VBA 两次打开同一个工作簿,但一个实例是只读的
【发布时间】:2012-01-17 07:32:18
【问题描述】:

我创建了一个可写工作簿的只读快捷方式。这样做,当我手动分别单击快捷方式和实际文档时,我可以同时打开同一工作簿的单独只读和可写实例。但是我似乎无法在 VBA 代码中复制它。尝试使用 VBA 代码从只读实例打开同一个工作簿会关闭只读实例,只留下可写的实例,EG

Workbook.Open filename:=ActiveWorkbook.FullName, editable:=True

从只读实例运行它会终止实例并将其替换为可写实例。我希望能够同时拥有两者,但不知道如何做到这一点?原因是我希望能够将在只读实例中所做的更改发布到可写实例,用户只需要几秒钟对可写实例的写访问权限,足够的时间让 VBA 代码打开它,发布更改,并且快速保存并退出并重新激活只读实例。这允许团队中的多人几乎同时对同一个工作簿进行更改,而不必受到“共享工作簿”的限制,同时还能够查看文档。

但是如果有人在两者之间做出改变怎么办?好吧,如果其他人在用户打开文档后进行了任何更改,则会告诉用户重新加载只读实例,这只是调用上面的代码 where editable = false。

帮助不胜感激

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    此方法将在当前实例中打开工作区,因此如您所说,它将替换当前打开的工作区。您需要创建一个新的 excel 应用程序引用并使用它打开它,例如:

    Dim xlApp As New Excel.Application
    Dim xlWrkBk As Excel.WorkBook
    
    xlApp.WorkBooks.Open FILENAME, , READ ONLY (True/False)
    
    Set xlWrkBk = xlApp.ActiveWorkbook
    
    xlApp.Visible = True
    

    希望这会带你走向正确的方向:)

    【讨论】:

    • 我似乎仍然遇到加载项问题。 Tools->Add-Ins 将它们显示为为可写实例安装,但代码未加载。从可写实例调用加载项代码不起作用。我又被难住了:-\
    • 这是您在 Excel 中使用的附加加载项,还是您指的是打开文档中的一些 VBA 代码?
    • 我没有解决手头的具体问题,但我想我可能有更好的解决方案。我还没有完全测试它,但它使用 ActiveWorkbook.ChangeFileAccess 方法,基本上将访问更改为可写,保存更改,然后将其更改回只读。当然,首先检查文档以查看自从文档以只读方式打开后是否进行了任何更改,如果是,则在执行此操作之前要求用户刷新文档。
    • @Wes 老实说,让多人处理同一个电子表格,并根据他们所做的更新混合读取或写入模式是一个糟糕的模式。如果可以转而使用数据库方法,那么这应该会少得多。
    • 我不确定数据库方法是否适用于我的需要,如果我错了,请纠正我。我处理的不是单元格和计算中的数据,而是形状(文本框、图片、组等)。基本上,它是一个完全满足我们需求的电子看板。形状代表虚拟便利贴。我们喜欢 Excel,因为它有网格、通过 VBA 的自定义能力、生成指标的能力等。但如果可以通过数据库实现更好的解决方案,我会全力以赴。
    【解决方案2】:

    打开工作簿 Editable,然后 SaveCopyAs 到具有临时文件名(必须是不同的文件名)的临时文件夹,然后以只读方式打开副本

    【讨论】:

      猜你喜欢
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      相关资源
      最近更新 更多