2

我有一个“摘要” Excel 工作簿,其中包含与其他“数据”工作簿的数据连接和数据连接。

  1. 当刷新连接并且用户在数据工作簿中时,刷新会失败,说它是只读的。(然后它会尝试打开数据工作簿。)有没有办法解决这个问题?例如读取数据而不是需要写入权限?下面的数据字符串属性。

Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=C:\Test\Test.xlsm;Mode=Share Deny Write;Extended Properties="HDR=YES;";Jet OLEDB:System database=" ";Jet OLEDB:Registry Path="";Jet OLEDB:Engine Type=37;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB: New Database Password="";Jet OLEDB:创建系统数据库=False;Jet OLEDB:加密数据库=False;Jet OLEDB:不要在 Compact=False 上复制区域设置;Jet OLEDB:Compact without Replica Repair=False;Jet OLEDB: SFP=False;Jet OLEDB:支持复杂数据=False;Jet OLEDB:绕过 UserInfo 验证=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:绕过 ChoiceField Validation=False

  1. 当我刷新连接并且用户进入数据工作簿时,excel 说它只读并由“另一个用户”使用。

我正在使用 VBA 刷新ActiveWorkbook.Connections("Test.xlsm").Refresh

VBA 中有没有办法告诉 Excel 放弃访问权限,以便数据工作簿变得免费。我能想到的唯一解决方案是关闭工作簿并再次打开。

4

1 回答 1

1

好的,我找到了一个解决方案,希望它会在未来对其他人有所帮助。

  1. 我先解决第二个问题!

    Dim conn As Variant
    
    For Each conn In ActiveWorkbook.Connections
        conn.OLEDBConnection.MaintainConnection = False
     Next conn
    

所以在 excel 2013 中,我发现维护连接属性默认设置为 true。在我刷新数据连接后,这会将其设置为 false。工作得很好,现在用户可以在我刷新后毫无问题地进入源数据。

  1. 对于第一个问题,经过大量搜索+尝试设置连接字符串 Mode=Read/Readonly=False 等。(我无法开始工作)我决定在刷新连接时处理只读问题。基本上我有一些代码来检查源文件中是否有用户。如果他们以只读方式打开源文件,请刷新连接(和枢轴)然后关闭文件。如果没有用户打开文件,则只需刷新连接。如果有人需要代码,请评论,我可以发布

非常感谢!

于 2016-03-18T13:10:13.773 回答