|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Доброе время суток! Есть два десятка excel-файлов. Регулярно требуется часть листов с этих файлов импортировать в Access-файлы с теми же именами файлов. Как я решал эту задачу. Импортировал каждый лист каждого файла и сохранял опции импорта в меню "Сохраненные операции импорта". В дальнейшем, запуская импорт по сохраненным параметрам, обновлял нужные таблицы. Все это хорошо... Но обновление баз даже с применением сохранения настроек занимает довольно продолжительное время. Подскажите, пожалуйста, можно ли это автоматизировать? Есть опыт написания макросов в Excel. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 10:46 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
barbacucaЕсть опыт написания макросов в Excel. Т.е. с VBA вы знакомы. Напишите процедуру, в которой многократно вызывайте метод DoCmd.TransferSpreadsheet, подставляя путь к файлу, имя листа и имя таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2016, 11:40 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), спасибо, все получилось... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 08:27 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), А не подскажете, как сделать так, чтобы данные не добавлялись в таблицу, а заменяли существующие (с сохранением типа данных у полей) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 08:43 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), спасибо. справился сам. CurrentProject.Connection.Execute ("DELETE * FROM Tabl;") ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 09:00 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Что то у меня все слишком сложно получается... Может поможете с написанием кода для решения следующей задачи: 1. В текущем Access файле M.accdb нужно удалить все таблицы. 2. Из файла M.xlsm нужно загрузить данные. Имена таблиц должны соответствовать именам листов в Excel-файле. Имена полей - именам заголовков (первая строка). Проигнорировать лист с именем "ПереченьМОП". Обновление полей не подходит, поскольку количество столбцов и их имена не всегда совпадают. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 12:05 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
barbacuca1. В текущем Access файле M.accdb нужно удалить все таблицы. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
barbacuca2. Из файла M.xlsm нужно загрузить данные. Имена таблиц должны соответствовать именам листов в Excel-файле. Имена полей - именам заголовков (первая строка). Проигнорировать лист с именем "ПереченьМОП". Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2016, 14:42 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), спасибо огромное! Очень выручили! VBA заругалась на 'Dim db As Database'. Compile error: Expected user-defined type, not project Закомментировал и все заработало... ps Хотелось бы выразить материальное поощрение. Сообщите в лс номер банковской карты ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 06:58 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
barbacucaЗакомментировал и все заработало... Вот это не очень хорошо. Значит у вас в модуле в самом начале не стоит Код: vbnet 1.
и можно использовать необъявленные переменные, что рано или поздно приведет к ошибкам, которые будет сложно найти. Добавьте эту опцию в каждый модуль, а в VBA редакторе поставьте галочку Tools->Options->Editor->Require Variable Declarations, чтобы в создаваемых модулях эта опция ставилась автоматически. То, что у вас не опознался тип Database значит, скорее всего, что не подключена библиотека Microsoft Office Database Engine Object Library (Tools->References) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 07:26 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
MrShin, вроде подключено (см. скриншот). Но объявлять переменную не хочет ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 07:59 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
MrShin, пытаюсь удалить поле: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 08:03 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
barbacucaХотелось бы выразить материальное поощрение. "спасибо огромное!" меня устраивает, на то и форум. Хотите поощрить - выпейте за мое здоровье. barbacucadb.TableDefs(i).Fields(j).Delete Это неправильно. У поля нет метода Delete, он есть в коллекции Fields. Надо так: Код: vbnet 1. 2. 3.
А что это вы такое делаете? Да еще в цикле по таблицам и их полям? barbacucaVBA заругалась на Dim db As Database Странно! В ObjectBrowser-е есть библиотека DAO? Если набираете Dim db As DAO. - после точки вываливается список? Там есть Database? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 12:31 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), >> А что это вы такое делаете? Да еще в цикле по таблицам и их полям? В дополнение к тому макросу, что Вы написали, мне необходимо было удалить столбцы с именами "Служебное1", "Служебное2", и т.д. после импорта >> Если набираете Dim db As DAO. - после точки вываливается список? Там есть Database? Список "вываливается" и DataBase там есть. А подскажите, пожалуйста, как программно заставить все импортированные таблицы "открыться" для пользователя? Пробовал db.TableDefs(i).Open, db.TableDefs(i).Visible ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 13:11 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
barbacucaА подскажите, пожалуйста, как программно заставить все импортированные таблицы "открыться" для пользователя? Пробовал db.TableDefs(i).Open, db.TableDefs(i).Visible Используйте DoCmd.OpenTable barbacucaмне необходимо было удалить столбцы с именами "Служебное1", "Служебное2", и т.д. после импорта Сколько полей вы удаляете и сколько остается? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 14:26 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Удаляются от 0 до 10 полей. А всего их от 40 до 70 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 14:33 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
barbacucaУдаляются от 0 до 10 полей. А всего их от 40 до 70 Тогда ваш подход правильный. Если, конечно, вы перебираете поля в порядке убывания индекса (j). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 15:15 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), а подскажите, пожалуйста? есть ли в Access Личная книга макросов, по аналогии с Personal.xls в Excel? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 16:27 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Вопрос снят... Нашел... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.08.2016, 16:32 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев )barbacuca1. В текущем Access файле M.accdb нужно удалить все таблицы. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
barbacuca2. Из файла M.xlsm нужно загрузить данные. Имена таблиц должны соответствовать именам листов в Excel-файле. Имена полей - именам заголовков (первая строка). Проигнорировать лист с именем "ПереченьМОП". Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
У меня возникла проблема при моделировании. строчка Код: vbnet 1.
выдает ошибку: 3027 База данных или объект доступны только для чтения. Подскажите, как лечить? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2016, 17:30 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
HELP! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2016, 09:53 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Владимир86У меня возникла проблема при моделировании. строчка Код: vbnet 1.
выдает ошибку: 3027 База данных или объект доступны только для чтения. Подскажите, как лечить? Именно на этой строке? У меня не выдает. В этот момент файл закрыт? Если файл открывать вручную, ничего не сообщает? Редактировать можно? Это на любом файле, не только из этой группы? Попробуйте True в 3-м аргументе (Только чтение) заменить на False. Похоже, что-то с настройками безопасности файла или системы. Может пришлете файл для опытов? Можно без данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2016, 12:09 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), возникла новая проблема... Некоторые поля в Excel имеют длину более 255 символов. Подскажите, пожалуйста как мне создать их в Access? Пробовал в запросе ТЕКСТ(999), МЕМО(999). Понимаю, что в корне не прав, но не знаю в какую сторону копать... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2016, 12:47 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
При чтении из Excel команда TransferSpreadsheet или запрос используют драйвер, который определяет тип полей на выходе на основании данных в нескольких первых строках на листе (16 что-ли). Что бы драйвер понял, что поле должно быть МЕМО, а не ТЕКСТ - в этих ячейках должно быть хоть одно значение с длиной более 255 символов. Если у вас есть доступ к реестру и эта задача выполняется только на одном компе, то можно изменить значение параметра на ветке JET\EXCEL Иначе самое простое - переставить строку с длинным текстом вверх. Если это затруднительно - можно добавить строку (1-ю под заголовками) с длинным текстом в нужных ячейках (например 300 символов "я"). После импорта удалить эту запись в таблице. ЗЫ. "Пробовал в запросе ТЕКСТ(999), МЕМО(999)" - о каком запросе речь? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2016, 15:07 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Спасибо. Помогло... ps про ТЕКСТ(999), МЕМО(999) - это бред. Я это понял позже. Нет смысла расширять размер поля, если он пришел уже урезанным. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2016, 15:57 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
У меня этот код таблицы создаёт, а данные не перекидывает. только одну пустую строку в таблице, при повторном запуске кода - ещё строку в таблице создаёт. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2016, 18:06 |
|
|
start [/forum/topic.php?fid=45&msg=39305984&tid=1613163]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 149ms |
0 / 0 |