|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.10.2009, 21:18 | #1 |
Регистрация: 30.05.2009
Сообщений: 8
|
Ошибка в коде Exel to Access
Добрый вечер ув. форумчане.
Есть надобность экспортировать данные из файла xls в таблицу access. Есть программа написана в access 2003 с использованием форм и VBA. Программа работает, данные через формы вносятся в одну единственную таблицу (contract). Но нужно организовать экспорт данных из таблицы Exel. В моем случае таблица имеет несколько листов, но экспорт нужен из одного листа. В нем необходимые данные начинаются с 5й строчки (1-4 описание столбцов), и 35 столбцов. Некоторые ячейки могут быть пустыми, это не важно. Есть код который должен делать импорт, но он почему-то не работает. Я в VBA никаких знаний не имею, поэтому взываю вас к помощи. Вопрос жизни и смерти Форма для выбора файла Private Sub btnExcel_Click() Dim dlg As FileDialog Set dlg = FileDialog(msoFileDialogFilePicker) dlg.Filters.Clear dlg.Filters.Add "Òàáëèö³ Excel", "*.xls" dlg.AllowMultiSelect = False On Error Resume Next On Error GoTo 0 dlg.ButtonName = "Çàâàíòàæåííÿ XLS ôàéëà" If dlg.Show Then edtFileXLS = Trim(dlg.SelectedItems.Item(1)) Else MsgBox "Ôàéë íå âûáðàí" End If End Sub Код импортера Private Sub btnImpExcel_Click() Dim xmlFile As String Dim InsCommandText As String Dim CntRow As String xmlFile = edtFileXLS CntRow = "A4:AI" & edtCntRow On Error GoTo ImpExlErr 'On Error Resume Next ' Âûêëþ÷åíèå îáðàáîò÷èêà îøèáîê. DoCmd.DeleteObject acTable, "ExelTable" err = 0 ' Î÷èñòêà êîäà îøèáêè. DoCmd.TransferSpreadsheet acImport, 8, "ExelTable", xmlFile, True, CntRow '"A4:AI6" 'DoCmd.RunSQL "DELETE FROM ExelTable" InsCommandText = "INSERT INTO [contract](DECL_NUM,DECL_DATE,APP_NUMBER,CON_ REG_DATE,EXECUTE_WORK_DATE" + _ ",OWNER_NAME,OWNER_FIRST_NAME,OWNER _PATRONYMIC,OWNER_ID_CODE" + _ ",KOATUU,ZONE,QUARTER,CAD_NUMBE R, AREA, PURPOSE_CODE, PZ_ORGAN,PZ_NUMBER,PZ_DATE" + _ ",DEV_REG_NUM,DEV_REG_DATE,TD_PERFO RMER,DEV_EW_AKT_DATE" + _ ",GA_SERIES,GA_NUMBER,GA_REG_DATE,G A_REG_NUM" + _ ",REG_RETURN_DATE,REG_RETURN_NO TE) " + _ "SELECT F1 & F2 as DECL_NUMBER,F3, F17,F18,F19, F4,F5,F6,F7" + _ ",F8,F9,F10,F11, F12, F13, F14,F16,F15" + _ ",F20,F21,F22,F23" + _ ",F26,F27,F31,F32, F33,F34 " + _ "FROM [ExelTable]" CurrentDb.Execute InsCommandText ImpExlErr: err.Clear End Sub |
14.10.2009, 22:40 | #2 |
Участник клуба
Регистрация: 10.08.2009
Сообщений: 1,796
|
Здравствуйте infog.
хочу Вас огорчить задача, в представленном Вами виде, выполнена быть не может. Всему виной "данные начинаются с 5й строчки", в прилинкованной таблице, а именно из неё Вы хотите получить данные, это недопустимо. Решений может быть два: 1. привести исходную таблицу Excel, к "нормальному" табличному виду, с однотипными данными в полях (столбцах) и выполнять слияние запросом. 2. подключиться к таблице источнику с применением ADO, эта библиотека позволяет подключиться к данным любого диапазона таблицы Excel и перебором рекордсета передать данные в целевую таблицу. других вариантов к сожалению нет. Евгений. |
14.10.2009, 22:57 | #3 | |
Регистрация: 30.05.2009
Сообщений: 8
|
Цитата:
Меня интересует более простой вариант. Как я понял, вы советуете сохранять нужный лист в отдельный файл и без использования каких либо заглавий ячеек таблицы? Я убирал лишний текст, но не проверял хранение одной единственной таблицы в файле. Сейчас проверю. Сам код верный? Он позволит построчно перенести всю таблицу в базу данных access? Последний раз редактировалось infog; 14.10.2009 в 23:01. |
|
14.10.2009, 23:52 | #4 |
Регистрация: 30.05.2009
Сообщений: 8
|
|
15.10.2009, 20:02 | #5 |
Участник клуба
Регистрация: 10.08.2009
Сообщений: 1,796
|
Здравствуйте infog.
"код который должен делать..." - код никому ничего не должен, тем более ответ на Ваш вопрос "Сам код верный?", ответ - нет неверный, даже без анализа VBA, синтаксис строки SQL явно неработоспособен: "...,REG_RETURN_DATE,REG_RETURN_NO. .." как минимум должно быть так: "..., REG_RETURN_DATE, REG_RETURN_NO..." Евгений. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка в коде. СИ | Ver0nica | Помощь студентам | 2 | 02.10.2009 19:36 |
Ошибка в коде. | fanyl | Паскаль, Turbo Pascal, PascalABC.NET | 10 | 21.09.2009 12:09 |
Ошибка в коде | Revival001 | PHP | 11 | 12.07.2009 19:25 |
Ошибка в коде | nikleb | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 10.03.2008 22:48 |