2016-05-17 190 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