Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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文件导入数据,使文件不会被其他用户锁定_Excel_Ms Access_Vba - Fatal编程技术网

从Excel文件导入数据,使文件不会被其他用户锁定

从Excel文件导入数据,使文件不会被其他用户锁定,excel,ms-access,vba,Excel,Ms Access,Vba,我有一个链接数据库到我的前端访问 此Excel电子表格更新非常频繁,每当用户打开前端时,它也会在另一个窗口中打开链接的Excel电子表格,从而防止任何其他人尝试使用该链接的电子表格 我试着想出两种不同的解决方案,但都没有成功 方法1: 每次打开表单时,使用VBA通过本地目录中的下一行创建Excel文件的副本 Private Sub Form_Load() FileCopy "\\calfs01\LOCATION_A\FILE.xlsx", _ "\\calfs01\LOCAT

我有一个链接数据库到我的前端访问

此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电子表格中的数据创建一个新表格,并让它在表单_Load()上更新表格。最后,我无法实现这一步,不幸的是,我丢失了它的代码
使用自动化流程的问题是Excel电子表格的前两行是标题,我不知道如何解决这个问题

方法3:

使用批处理文件复制Excel文件,但是该文件位于网络驱动器上,并且(如果我错了,请更正)无法从网络驱动器复制

我这里的主要问题是,执行以下步骤的最佳方法是什么?

  • 本地复制文件(或在网络上复制,只要每个用户至少有一个副本,这样就不会出现与电子表格冲突的连接问题)
  • 复制后链接文件

  • 在我看来,到目前为止最好的方法是方法2。不幸的是你丢失了密码,所以我说不出你哪里出错了

    有很多方法可以将数据从Excel文件导入Access。如果因为有多个标题而遇到问题,可以先导入,然后再轻松导入所需内容

    导入的一种简单方法是使用查询(假定命名范围的第一行包含标题:

    CurrentDb.Execute“从“\\calfs01\LOCATION\u A\FILE.xlsx”[Excel 12.0 Xml;]中的[MyNamedRange]中选择*到MyTemporary表中;

    或者,使用
    DoCmd.TransferDatabase

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

    如果您的范围大小不断变化,这会有点困难,但肯定是可能的。

    因此,如果我使用方法2,您有什么可以作为参考来帮助我使用此方法吗?某种教程?此外,在导入此方法时,是否可以使用此过程更改每个列的名称?共有181列s、 我不介意为代码一次手动执行1次,只要这是一次性的,并且不需要每次使用方法2的两种方法打开数据库时都执行,您实际上可以声明列名(第一种方法类似于从etc中选择F1作为ColumnA,F2作为Column2等,第二种方法插入到现有表中并使用其列名)。我没有教程(你可以阅读官方文档,只写了这两种方法。不过,我在我的答案中链接了命名范围的快速指南。