2017-09-19 52 views
1

我有一個鏈接的數據庫到我的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

在我看來,目前最好的方法是方法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 ),只是寫出了這兩種方法,儘管我將我的答案鏈接到命名範圍的快速指南。 –

相關問題