Excel VBA:连接刷新错误

时间:2015-12-21 15:36:25

标签: excel vba excel-vba access-vba ms-access-2007

我有一个访问数据库,位于网络驱动器上的共享文件夹中。

多台计算机通过excel访问它。用户有权通过Excel工作表更新和修改数据库。该数据库可作为Excel工作表中的嵌入式表格使用。

我正在使用Excel 2007。

为了使其正常工作,我自动运行宏,将数据源路径更改为计算机的路径。例如,在我的PC上,它可以位于C:/accessDB.accdb,但是在用户X的PC上,数据可以位于Z:/accessDB.accdb。

运行的更新如下:

                                    mouse events
                                         |
                  pan/zoom properties    |
                         |               |
                         |               v
real-space properties <--+--> screen-space properties ------> depicted rectangle
        |             * 
        |
        -------> API

完成后,我遍历数据库连接,并刷新数据库连接。代码如下:

Dim connString As String
Dim folderLoc As String
Dim cn As WorkbookConnection
Dim oledbCn As OLEDBConnection

Set cn = ThisWorkbook.Connections(local_table)
Set oledbCn = cn.OLEDBConnection

folderLoc = ThisWorkbook _
            .sheets(settingSheet) _
            .Range(settingDbFileFolder).Value _
            & "\" & _
        ThisWorkbook _
            .sheets(settingSheet) _
            .Range(settingDbFileName).Value

connString = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=" & _
            folderLoc & _
            ";Mode=Share Deny None;Extended Properties=" & Chr(34) & Chr(34) & ";Jet OLEDB:System database=" & Chr(34) & Chr(34) & _
            ";Jet OLEDB:Registry Path=" & Chr(34) & Chr(34) & ";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=1" & _
            ";Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=" & Chr(34) & Chr(34) & _
            ";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False" & _
            ";Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False"

If oledbCn.Connection <> connString Then
    oledbCn.Connection = connString
End If

这已经好几个月了。但是,在我的同事重新启动计算机后, Dim conn As OLEDBConnection If ThisWorkbook.Connections.Item(I).name = databaseName Then Set conn = ThisWorkbook.Connections.Item(I).OLEDBConnection conn.SourceDataFile = "" conn.Refresh conn.MaintainConnection = False End If 点我的他们的PC而不是我自己的的错误如下:

conn.Refresh

连接对象如下所示:

连接属性如下所示:

任何帮助或指导都会受到赞赏,这是一个非常令人沮丧的错误,因为它已经工作了几个月而没有任何错误 - 更不用说,它对我的​​电脑工作正常。

1 个答案:

答案 0 :(得分:0)

这似乎与代码无关,而且与我正在访问它的驱动器上的共享文件的Windows用户权限有关(感谢NinjaLlama指向我正确的方向) 。把它放到一个标准的数据库中显然是要走的路,但IT限制正在阻止这种情况发生。

我为了让它工作而做的是在用户的PC上打开一个空白的excel实例。然后我去了数据 - &gt; “从Access”并单击.accdb文件。然后,我点击了所有各个步骤,并将Access表导入到工作表中。然后我关闭了这张表,但不是实例。然后,我打开了实例中的文件,运行了宏,并且看到它已经没有任何问题地刷新了。

以这种方式连接显然已在文件系统/文件的某处解锁了一些权限。虽然这不是一个真正的解决方案,但它至少是确定错误来源的重要一步。