从Excel文件导入数据,所以文件没有从其他用户锁定用户

问题描述:

我有一个链接的数据库到我的Access前端。从Excel文件导入数据,所以文件没有从其他用户锁定用户

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

我试图想出几个不同的解决方案,并没有占上风。

方法1:

利用VBA创建Excel的副本通过以下行每次打开表单时文件在本地目录。

Private Sub Form_Load() 

    FileCopy "\\calfs01\LOCATION_A\FILE.xlsx", _ 
    "\\calfs01\LOCATION_B\FILE.xlsx" 

End Sub 

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

方法2:

链接的Excel电子表格代替,创建基于从Excel电子表格中的数据的新表,并将它上的Form_Load更新表()。最后,我无法完成这一步,很不幸失去了代码!
使用自动化过程的问题是Excel电子表格中的前两行是标题,我不知道解决此问题的方法。

方法3:

使用批处理文件复制Excel文件,但该文件位于网络驱动器上(纠正我,如果我错了),不能从网络驱动器复制。

我在这里的主要问题是什么将是做下面的步骤的最佳方式?

  1. 将文件复制在本地(或网络上,只要有至少一个拷贝为每个用户因此没有冲突的连接问题到电子表格)
  2. 链接文件拷贝一次

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

有许多方法可以将数据从Excel文件导入到Access中。如果因为您有多个标题而遇到问题,您可以先create a named range in Excel,然后您可以轻松导入您想要的内容。

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

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" 

如果大小的你的范围不断变化,这有点难度,但肯定可能。

+0

所以,如果我使用方法2,你有什么我可以用作参考来帮助我使用这种方法吗?某种类的教程?另外,在导入时,是否可以使用此过程更改每列的名称?有181列,我不介意手动执行1次代码,只要它是一次性的,不需要每次打开数据库就完成 – Maldred

+0

使用这两种方法的方法二,你可以实际列状态名称(第一种方法就像'SELECT F1 As ColumnA,F2 As Column2 etc FROM etc',第二种方法插入现有表并使用其列名)。我没有教程(可以阅读[DoCmd.TransferSpreadsheet]的官方文档(https://msdn.microsoft.com/en-us/vba/access-vba/articles/docmd-transferspreadsheet-method-access ),只是写出了这两种方法,尽管我将我的答案链接到命名范围的快速指南。 –