Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:连接刷新错误_Excel_Ms Access_Vba_Ms Access 2007 - Fatal编程技术网

Excel VBA:连接刷新错误

Excel VBA:连接刷新错误,excel,ms-access,vba,ms-access-2007,Excel,Ms Access,Vba,Ms Access 2007,我有一个access数据库,它位于网络驱动器上的共享文件夹中 它由多台计算机通过excel访问。用户有权通过excel工作表更新和修改数据库。该数据库在excel工作表中作为嵌入表提供 我在用Excel2007 为了使其工作,我自动运行了一个宏,将数据源路径更改为计算机的路径。例如,在我的电脑上,数据可能位于C:/accessDB.accdb,但在用户X的电脑上,数据可能位于Z:/accessDB.accdb 运行的更新如下所示: Dim connString As String Dim fol

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

它由多台计算机通过excel访问。用户有权通过excel工作表更新和修改数据库。该数据库在excel工作表中作为嵌入表提供

我在用Excel2007

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

运行的更新如下所示:

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
这几个月来一直运作良好。但是,在我的同事重新启动计算机后,在
conn.Refresh
点,我在他们的电脑上收到一个错误,但我自己的电脑没有,如下所示:

Run-time error '-2147417848 (80010108'

Method 'Refresh of object  'OLEDBConnection' failed
连接对象如下所示:

连接属性如下所示:


任何帮助或指导都将不胜感激,这是一个非常令人沮丧的错误,因为它已经运行了数月,没有任何错误-更不用说,它对我的电脑运行良好。

这似乎与代码无关,而与windows用户对我访问它的驱动器上的共享文件的权限有关(感谢NinjaLlama为我指明了正确的方向)。将其放入标准数据库显然是一条可行之路,但IT约束目前阻止了这种情况的发生

为了让它工作,我在用户的PC上打开了一个空白的excel实例。然后我转到了data->“From Access”然后单击.accdb文件。然后,我单击了所有步骤,它将Access表导入到工作表中。然后,我关闭了此工作表,但没有关闭实例。然后,我在实例中打开了文件,运行了宏,看到它已顺利刷新


通过这种方式连接显然解除了文件系统/文件中某个位置的某些权限。虽然这不是一个真正的解决方案,但它至少是查明错误来源的重要一步。

我在SQL server上遇到了类似的问题,其他人在尝试访问数据库时都会出错但我可以毫无问题地访问和编辑。问题是,当我迁移数据库时,权限以某种方式被更改,我必须返回并编辑该数据库用户组的权限。