2016-05-17 246 views
0

需要幫助Access VBA 我試圖從Excel導入電子表格到訪問。一旦它被導入,它將被附加到一個不同的表格中,並且導入表格將被刪除,這樣我就可以導入一個新的電子表格。然而,當我追加時,我有錯誤需要追加整個表格,因爲我不會總是知道電子表格中的標題以及它們的數量。 請幫助。以下是我一直在努力的代碼。導入附加vba MS-Access

模塊 -

Option Compare Database 

Function selectFile() 
Dim fd As FileDialog, fileName As String 

On Error GoTo ErrorHandler 

Set fd = Application.FileDialog(msoFileDialogFilePicker) 

fd.AllowMultiSelect = False 

If fd.Show = True Then 
    If fd.SelectedItems(1) <> vbNullString Then 
     fileName = fd.SelectedItems(1) 
    End If 
Else 
    'Exit code if no file is selected 
    End 
End If 

'Return Selected FileName 
selectFile = fileName 

Set fd = Nothing 

Exit Function 

ErrorHandler: 
Set fd = Nothing 
MsgBox "Error " & Err & ": " & Error(Err) 

End Function 

VBA -

Private Sub cmdImportNoDelete_Click() 
'Unset warnings 
DoCmd.SetWarnings False 

'Import spreadsheet 
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "Import", selectFile, True 

'SQL append statement, Needs to append entire table (must be able to append multiply table with different headers 
DoCmd.RunSQL "INSERT INTO Tbl_ImportDump * FROM Import" 

'SQL delete Table 
DoCmd.DeleteObject acTable, "Import" 


DoCmd.SetWarnings True 
End Sub 
+1

是你面對的是'Tbl_ImportDump'和'Import'有不同的字段集(「頭」)......一個表包括不存在於其他,也許這兩個領域的基本問題有相同數據的字段,但字段名稱和/或數據類型不完全匹配?如果這是問題,向我們展示用於選擇Excel文件的代碼是沒有用的。 – HansUp

+0

HansUp 工作表大部分具有相似的字段名稱,但也有一些具有新字段或不同名稱字段。我想將所有這些轉儲到一個表中,然後我可以編寫一些qry來標識字段並創建一個標準的命名約定。 – Leofig123

回答

0

Tbl_ImportDump必須存在。如果它不,創建它:

DoCmd.RunSQL _ 
    "CREATE TABLE Tbl_ImportDump (Col1 Col1DataType, Col2 Col2DataType, etc)" 

然後導入您的電子表格(如表導入,因爲你已經做了),拿在導入表中的列名,並把這些進入插入後聲明:

dim ImportCols as String: ImportCols = "" 
dim ii as long 
dim rs as Recordset 

rs.OpenRecordset "SELECT TOP 1 * FROM Import" 
for ii = 0 to 2 
    ImportCols = ImportCols & "," & rs.Fields(0).Name 
next 
importCols = mid(importCols, 2) 

DoCmd.RunSQL _ 
    "INSERT INTO Tbl_ImportDump (Col1, Col2, Col3) " & _ 
    "SELECT " & importCols & " FROM Import" 
+0

約翰 我試過了,但我帶來了同樣的問題。 Tbl_ImportDump目前沒有字段,當我嘗試「插入」它給了我一個錯誤3127,語句包含以下未知字段。 我希望「插入」將添加新的領域,如果他們不是他們的。 你知道如何解決這個問題嗎? – Leofig123

+0

簡短的回答是你不能這樣做 - 但是我不確定在這一點上,只是你正在嘗試什麼,因此我現在無法回答。請在你的文章中添加Tbl_ImportDump的當前結構,以及它已經包含的示例數據行 - 假設它存在(並且它不這麼說);第二,提供關於Import表中存在哪些列/數據的想法 - 並在這裏留下我的評論,我的回答是說你已經完成了,所以Stack Overflow會通知我。 –

+0

John, 我從不同的用戶那裏收到幾十張電子表格,裏面應該有什麼類似的信息;我的意思是一個用戶將有一個電子表格,標題標題爲Date | Name | Loss,而另一個用戶可以標題爲Date | First_Name | Recovery。所以標題標題是不同的,但它們意味着相同的東西。 所以我做了一個表,在那裏我有所有可能的不同命名約定,從用戶和它應該轉換爲。 所以我想導入這些電子表格並將這些標題轉換爲標準的名稱約定。 我希望我的解釋有幫助 – Leofig123