在已同步的OneDrive文件夹中使用Excel工作簿作为ADODB连接

时间:2017-05-03 16:36:47

标签: excel vba adodb

这个问题看起来非常深奥,但却令我头疼......

摘要

我在同步的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

1 个答案:

答案 0 :(得分:0)

我找到了一个解决方案:指向本地文件而不是远程位置。为了做到这一点,有一个简单的字符串替换函数,它通过查询环境变量来查找本地文件路径(这些变量告诉系统 OneDrive 文件的存储位置)。

我稍微修改了代码,因为我的真实位置似乎包含“onedrive.”,它不在原始代码中。

完整代码如下:

result.columns = ["_id", "IdList", "levels.active", "levels.level", "levels.actions.isActive"]