2017-07-19 126 views
1

我正在創建一個Access數據庫,對於VBA的一些幫助將不勝感激。將excel文件導入訪問表

幫助是什麼,我需要做的,

我有一個需要被添加到現有的表在Access中的Excel工作表中包含的數據。有沒有辦法在VBA中逐行添加excel中的數據?

Excel中的每一行,我需要:

:檢查sample_number在Access表已經存在,然後做一些動作,如果它存在。

2nd:如果sample_number尚不存在,則將該行從excel複製並粘貼到Access表中。

現在我被困在如何按行處理excel電子表格而不是一次導入整個表格。

幫助非常感謝! 謝謝

+0

你到目前爲止嘗試過什麼,你可以發佈你的嘗試,爲什麼不適合。您可以使用'transferspreadsheet'到一個新表中,然後使用SQL通過使用「內部連接」和「左連接」來派生所需的數據子集。在這裏使用SQL並構建函數,這是我的建議。即使跳過導入並在SQL中使用Excel文件。 –

+0

您好我一直在試圖使用'循環查詢'和'聚合函數'來實現我的最終目標,但到目前爲止,似乎查詢並不足以滿足我的需求。 –

回答

1

訪問比excel更加結構化,因此搜索和數據驗證更容易完成。要在驗證每條記錄的同時從excel中導入excel,我發現的最好的方法是一攬子導入到臨時訪問表中,然後遍歷臨時表來驗證數據並根據需要將它添加到目標表中,而不是嘗試查詢數據,同時仍在Excel電子表格中。希望這有助於

Dim SQL As String 
Dim rs As Recordset 

SQL = "SELECT field1,field2 FROM tempTable" 

Set rs = CurrentDb.OpenRecordset(SQL) 
Do While Not rs.EOF 

    'YOUR VALIDATION CODE HERE 


    rs.MoveNext 
Loop 
+0

好的建議,我會試試! –

+0

我添加了一些代碼的答案來幫助 – Bug

0

您可以使用transferspreadsheet到一個新的表,然後使用SQL通過使用一個內連接來獲得數據的,你需要的子集和左這裏加入使用SQL,並內置函數,將我的建議。即使跳過導入並在SQL中使用Excel文件。

就像這樣,新表是導入和db命令將是現有的表。這處理插入。將連接更改爲INNER JOIN並刪除WHERE子句將爲您提供一個將現有記錄的邏輯應用於邏輯的子集。

我需要用一些虛擬數據完全檢查SQL,但這是一個好的開始。

使用數據庫來做這些類型的工作。

INSERT INTO [tbl_DB_ORDERS] ([ORDER_NO]) SELECT NT.[ORDER_NO] FROM [NEW_TABLE] as NT LEFT JOIN [tbl_DB_ORDERS] AS ORD ON NT.[ORDER_NO]=ORD.[ORDER_NO] WHERE ORD.[ORDER_NO] IS NULL