2016-05-17 20 views
0

Нужна помощь с Access VBA Я пытаюсь импортировать таблицы из Excel в доступ. После его импорта он будет добавлен в другую таблицу, и таблица импорта будет удалена, после чего я смогу импортировать новую таблицу. Однако у меня есть ошибка при добавлении мне нужно добавить всю таблицу, потому что я не всегда буду знать заголовок из таблицы и сколько их. Пожалуйста, помогите. Ниже приведен код, над которым я работал.Импорт append 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

John Я пробовал это, но я пришел с той же проблемой. В Tbl_ImportDump в настоящее время нет полей, и когда я пытаюсь «вставить», это дает мне ошибку 3127, инструкция содержит следующее неизвестное поле. Я надеялся, что «insert into» добавит новые поля, если они не являются их. Вы знаете, как это исправить? – Leofig123

+0

Короткий ответ: вы не можете этого сделать, однако я не уверен, что в данный момент именно то, что вы пытаетесь, и поэтому я не могу ответить в это время. Pls добавляет к вашему сообщению, что представляет собой текущая структура Tbl_ImportDump, и примерная строка данных, которые она уже содержит, - если она существует (и если она не говорит об этом); Во-вторых, дайте представление о том, какие столбцы/данные существуют в таблице импорта, и оставьте здесь комментарий, по моему отвечу, чтобы сказать, что вы сделали, поэтому Stack Overflow уведомит меня. –

+0

John, Я получаю десятки электронных таблиц от разных пользователей с тем, что должно быть аналогичной информацией; я имею в виду, что один пользователь будет иметь электронную таблицу, выложенную с заголовками под названием Date | Name | Loss, а другой пользователь может маркировать заголовки как Date | First_Name | Recovery. Поэтому заголовки заголовков различны, но они означают одно и то же. Итак, я сделал таблицу, в которой у меня есть все возможное различное соглашение об именах от пользователя и для чего оно должно быть преобразовано. Итак, я хочу импортировать эти таблицы и преобразовать эти заголовки в стандартное соглашение о названии. Я надеюсь, что мои объяснения помогут – Leofig123

Смежные вопросы