Рано или поздно любой программист VBA сталкивается с необходимостью перенести нужные данные из Excel в Access. Например, для их дальнейшей обработки. Причиной этому может стать то, что в Access редактирование данных идет значительно быстрее. Когда количество строк переваливает за 30000, это становится особенно заметным. Но разговор сейчас не о количестве строк, а о способе перенести данные из Excel в Access. Поскольку в Access используются таблицы, в Excel мы должны структурировать данные и привести их к табличному виду. Для импорта данных можно, конечно, написать отдельный макрос. Но для себя я убедился, что быстрее и эффективнее будет использовать объект DoCmd. А если точнее, метод этого объекта, который называется TransferSpreadsheet. В этом случае импорт данных будет осуществляться при помощи одной единственной команды. Частично про подготовку к импорту упоминал вот здесь. Поэтому опишу только сам синтаксис команды для импорта. Сама команда выглядит вот так:
DoCmd.TransferSpreadsheet TransferType, SpreadsheetType, TableName, FileName, HasFieldNames,
Range
Итак, все по порядку:
TransferType - это тип передачи. Для импорта в Access ставится acImport.
SpreadsheetType - в справке написано, что это тип таблицы. Обычно ставится acSpreadsheetTypeExcel9. Вместо 9 также может встретиться 7 или 12. Пока не встречал ситуаций, чтобы это кардинально влияло на процесс импорта.
TableName - это имя таблицы Access, в которую вы хотите перенести данные. Поскольку это строковое выражение, то пишется в кавычках. Например, "table_1".
FileName - это путь к файлу, из которого вы хотели бы импортировать данные. Лично я предпочитаю брать путь к файлу из диалогового окна, записывать этот путь в переменную и уже ее подставлять в команду импорта. Но можно и явно прописать путь к файлу. В этом случае не забываем про кавычки! Например, "D:\test.xls".
HasFieldNames - этот аргумент может принимать значения True или False. Если стоит True, то первая строка импортируемой таблицы будет использоваться в качестве имен полей (заголовки таблицы в Access). Если поставить False, первая строка будет восприниматься как данные, а не как заголовки. По умолчанию, этот аргумент равен False.
Range - это диапазон импортируемых ячеек. Например, "A1:G5". Если аргумент оставить пустым, то будет импортироваться вся таблица. Важное замечание - этот аргумент может быть использован ТОЛЬКО при импорте. Если он будет использован при экспорте, то функция просто вернет ошибку.
Вот, собственно, и все! В качестве заключения, хочу добавить еще одно замечание:
Плюс данного метода заключается ещё и в том, что если вдруг в Access не окажется таблицы с указанным в команде именем, то такая таблица будет автоматически создана.
|