Четверг, 19.09.2024, 18:34
Приветствую Вас Гость

VBA - это просто!

Категории раздела
VBA [8]
Практические примеры VBA.
Статистика
Главная » 2013 » Июнь » 26 » Как бороться с Error 2391 "Поле не существует в результирующей таблице"
21:37
Как бороться с Error 2391 "Поле не существует в результирующей таблице"

На днях столкнулся с ошибкой "Run-time error '2391'", на которую потратил кучу времени, не говоря уже о нервах =)

Суть проблемы в следующем:

Допустим, нужно импортировать данные таблички из Excel в Access. Для этого имеем такую вот структуру в Excel (см.рисунок).

error_2391_excel

Для того, чтобы импорт свершился нужно создать такую же табличку с такими же заголовками полей в Access.

error_2391_access

Все, структура данных в Excel есть, таблица для импорта в Access создана. Фактически, теперь все приготовления закончены. А теперь при помощи вот такой вот строки в коде должен произойти импорт данных из нашей таблички Excel в табличку table_1 в Access:

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "table_1", "путь_к_файлу_Excel", True, "Имя_листа_Excel$"

И вроде бы все должно работать, ан нет! Получаем примерно следующее заявление:

error_2391

Конечно, первое, что приходит на ум - проверить соответствие названий столбцов в Excel и в таблице Access. Чаще всего находятся наименования, которые не соответствуют друг другу. В этом случае исправляем их, чтобы названия были идентичными, и - вуаля! - все работает.

А если все поля друг другу соответствуют, но ошибка все равно возникает? А вот тут может иметь место следующий нюанс. Excel при импорте, так сказать проверяет наличие информации в ячейках и составляет для себя таблицу импорта. Технически может быть по-другому, но для понимания удобней всего такое сравнение.

Так вот, возвращаясь к примеру выше, если вдруг в ячейке столбца "F" или "G" затесался какой-нибудь невидимый символ, например пробел, то Excel автоматом включит эти столбцы в свою таблицу импорта. Естественно, что этих столбцов в таблице Access не предусмотрено. То есть получится, что из Excel импортируется больше столбцов, чем есть в результирующей таблице table_1. Именно по этой причине нам в этом случае и выдается ошибка 2391.

Для того, чтобы все наладить, нужно удалить пустые столбцы справа от таблицы. Макросом это можно сделать вот так:

Columns("F:G").Select
Selection.Delete Shift:=xlToLeft

или так:

Columns("G:I").Delete Shift:=xlToLeft

В крайнем случае, всегда можно проделать данную операцию вручную, выбрав нужные столбцы -> правой кнопкой мыши -> "Удалить".

Категория: VBA | Просмотров: 5155 | Добавил: mpak-mr | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск
Календарь
«  Июнь 2013  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
Архив записей