从Excel文件导入数据,以便文件不被其他用户locking

我有一个链接的数据库到我的Access前端。

此Excel电子表格更新频率非常高,每当用户打开前端时,也会在另一个窗口中打开链接的Excel电子表格,从而防止其他人尝试使用该链接的电子表格。

我试图想出几个不同的解决scheme,没有一个占上风。

方法1:

每次打开表单时,使用VBA通过本地目录中的以下行创buildExcel文件的副本。

Private Sub Form_Load() FileCopy "\\calfs01\LOCATION_A\FILE.xlsx", _ "\\calfs01\LOCATION_B\FILE.xlsx" End Sub 

我收到一条错误消息,指出我没有所需的权限来复制它。 我有权限访问这个文件,因为我可以手动执行。

方法2:

不要链接Excel电子表格,而应根据Excel电子表格中的数据创build一个新表格,并使其更新Form_Load()上的表格。 最后我无法让这一步工作,不幸的是失去了它的代码!
使用自动化过程的问题是Excel电子表格中头两行是标题,我不知道解决此问题的方法。

方法3:

使用batch file来复制Excel文件,但该文件位于networking驱动器上(纠正我,如果我错了)不能从networking驱动器复制。

我在这里的主要问题是什么才是做下面的步骤最好的方法?

  1. 将文件复制到本地(或在networking上,只要每个用户至less有一个副本,以便与电子表格不存在冲突的连接问题)
  2. 链接文件一旦复制

在我看来,目前最好的方法是方法2.不幸的是,你丢失了代码,所以我不能说出错的地方。

有许多方法可以将数据从Excel文件导入到Access中。 如果您遇到问题,因为您有多个标题,则可以先在Excel中创build一个命名的范围 ,然后您可以轻松导入您想要的内容。

一个简单的导入方法是使用一个查询(第一行的命名范围假定包含头文件:

CurrentDb.Execute "SELECT * INTO MyTemporaryTable FROM [MyNamedRange] IN '\\calfs01\LOCATION_A\FILE.xlsx'[Excel 12.0 Xml;];

或者,也可以使用DoCmd.TransferDatabase

 CurrentDb.Execute "DELETE * FROM MyTemporaryTable" 'First, empty the table DoCmd.TransferSpreadsheet acImport,acSpreadsheetTypeExcel12Xml, "C", "\\calfs01\LOCATION_A\FILE.xlsx", True, "MyNamedRange" 

如果你的范围的大小不断变化,那就更难一点了,但肯定是可能的。