这个问题看起来非常深奥,但却令我头疼......
我在同步的OneDrive for Business文件夹中有一个Excel工作簿,我想将其用作ADODB连接的数据源,该连接是从工作簿本身的代码中调用的。但是,每当我尝试建立连接时,VBA都会抛出错误。如果文件位于未同步的文件夹中,则不会发生错误,例如我的文件。
我所需要的只是对连接的只读访问权限。我可以用不同的方式形成连接字符串以使其工作吗?
-2147467259
用于ODBC驱动程序的Microsoft OLE DB提供程序
[Microsoft] [ODBC Excel驱动程序]常规错误无法打开注册表项临时(易失性)进程0x17e0的Ace DSN线程0x3cd4 DBC 0x920bf1c Excel'。
我尝试了一个不同的连接字符串,我尝试将其设为只读(Mode = Read):
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read; _
Data Source=" & ActiveWorkbook.Path & Application.PathSeparator & _
ActiveWorkbook.Name & "; Extended Properties=""Excel 12.0 Macro;HDR=YES"";"
但是我得到了一个不同的错误:
-2147467259
Microsoft Access数据库引擎
无法更新。数据库或对象是只读的。
Sub TestExcelADODB()
Dim cnx As New ADODB.Connection
Set cnx = OpenExcelConnection(ActiveWorkbook.Path, ActiveWorkbook.Name)
cn.Close
End Sub
cn.Open上发生错误:
Public Function OpenExcelConnection(Path As String, File As String) _
As ADODB.Connection
Dim cn As New ADODB.Connection
If cn.State = adStateOpen Then cn.Close
cn.ConnectionString = "Driver={Microsoft Excel Driver _
(*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & _
Path & Application.PathSeparator & File
cn.Open
Set OpenExcelConnection = cn
End Function
答案 0 :(得分:0)
我找到了一个解决方案:指向本地文件而不是远程位置。为了做到这一点,有一个简单的字符串替换函数,它通过查询环境变量来查找本地文件路径(这些变量告诉系统 OneDrive 文件的存储位置)。
我稍微修改了代码,因为我的真实位置似乎包含“onedrive.”,它不在原始代码中。
完整代码如下:
result.columns = ["_id", "IdList", "levels.active", "levels.level", "levels.actions.isActive"]