gpt4 book ai didi

excel - 使用 VBScript 以独占模式打开 Excel 文件

转载 作者:行者123 更新时间:2023-12-02 06:10:37 24 4
gpt4 key购买 nike

我有一个简单的问题,但我搜索过这个问题但找不到任何有用的主题..

我正在开发一个 VBScript,它打开一个 Excel 文件并修改其中的一些内容..所以我使用以下代码:

    Set objXLApp = CreateObject("Excel.Application")

objXLApp.Visible = False
objXLApp.DisplayAlerts = False

Set objXLWb = objXLApp.Workbooks.Open(FilePath)

现在,我想要做的是使用一种锁定文件的方式打开 Excel 文件,并防止用户在脚本打开文件时打开它(直到它关闭)。

更新:

我认为问题在某种程度上与 Excel 实例有关,我尝试执行以下操作(当文件由脚本打开时):

  • 当我手动打开文件(当文件由脚本打开时)时,它们都成为单个实例。
  • 当我打开任何其他 Excel 文件时,它们都成为单个实例!并且原始文件(由脚本打开)变得可见!

现在这很奇怪,因为我使用的是 CreateObject("Excel.Application") 而不是 GetObject(, "Excel.Application")

最佳答案

在 Win 7 Excel 2010 上有一个注册表项 HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\command ,其默认值 “C:\Program Files\Microsoft Office\Office14\EXCEL.EXE"/dde.命令行 /dde 开关启用 DDE(动态数据交换机制 - 一种古老的 Win 3.0 进程间通信方法),强制 Excel 在单个实例中启动。我尝试删除该开关并打开工作簿,但无济于事。顺便说一句,如果您没有编辑注册表的权限,或者您打算将脚本分发给没有权限的人,那么这不是一种方法。也尝试过this answer ,但它不适用于 Win 7 Office 2010。

我已经在启用 DDE 的情况下测试了 test.xlsm 文件。当用户打开文件时,实际上它只是在现有实例中重新打开以使其可见。如果脚本已进行任何更改,则 Excel 会发出警报:

changes to be discarded

无论如何,都为用户提供了写访问权限。之后,当脚本保存文件时,会出现另一个警报:

file already exists

不久前,我创建了一个与 Excel 应用程序一起使用的脚本,并在 Win 7 Excel 2010 中遇到了与您所描述的相同的问题。我注意到,如果脚本中使用 CreateObject() 创建了多个 Excel 应用程序实例,则用户打开的 Excel 文件始终使用第一个创建的实例。我通过创建两个不可见的 Excel 应用程序实例(假设为虚拟实例和目标实例)解决了该问题。脚本的算法概述如下:

  1. 先创建虚拟实例,无需添加工作簿。之后,虚拟实例将暴露一个 Excel 文件,供用户在其中打开。
  2. 创建目标实例。
  3. 退出虚拟实例。
  4. 打开目标工作簿,修改并保存。
  5. 退出目标实例。

考虑下面的代码,它说明了实现您所需的可能方法:

' target file path
sPath = "C:\Users\DELL\Desktop\test.xlsm"
' create dummy instance
Set oExcelAppDummy = CreateObject("Excel.Application")
' create target instance
Set oExcelApp = CreateObject("Excel.Application")
' quit dummy instance
oExcelAppDummy.Quit
' open target workbook
With oExcelApp
.Visible = False
.DisplayAlerts = False
Set oWB = .Workbooks.Open(sPath)
End With
' make some changes and save
Set oWS = oWB.Sheets(1)
oWS.Cells(1, 1).Value = Now()
oWB.Save
' give additional time for test
MsgBox "Try to open test.xlsm, OK to end the script"
' close target workbook
oWB.Close
' quit target instance
oExcelApp.Quit

尝试打开文件,您将获得所需的输出:

open read-only and notify

脚本结束后的通知:

open read-write

关于excel - 使用 VBScript 以独占模式打开 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36019574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com