|
Макрос для быстрого импорта из 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 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
час58У меня этот код таблицы создаёт, а данные не перекидывает. Если таблицы создает, значит TransferSpreadsheet выполняется. Вы уверены в своем файле? Если импорт выполнить вручную - данные зальются? Киньте файл для опытов. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 09:51 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), файл для опытов ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 10:01 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
час58файл для опытов Это вы прикольнулись с файлом или он реально такой? Тем не менее три таблицы создались. Две, как и положено, пустые, а данные с Лист3 загрузились. Единственное замечание - методу TransferSpreadsheet указано, что заголовки есть, а на листе их нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 10:46 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев ), это я эксперимент делал. и вот такой файл использовал. ---------------------------- Спасибо. (лист-то был № 3 - вот я лох...) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2016, 10:50 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев )Владимир86У меня возникла проблема при моделировании. строчка Код: vbnet 1.
выдает ошибку: 3027 База данных или объект доступны только для чтения. Подскажите, как лечить? Именно на этой строке? У меня не выдает. В этот момент файл закрыт? Если файл открывать вручную, ничего не сообщает? Редактировать можно? Это на любом файле, не только из этой группы? Попробуйте True в 3-м аргументе (Только чтение) заменить на False. Похоже, что-то с настройками безопасности файла или системы. Может пришлете файл для опытов? Можно без данных. Ex- закрыт, вообще делал на разных файлах, не дает выполнение=(Я тоже думал про настройки, отключал все политики безопастности, но не пропускает. Файл во вложении, данные могут быть любыми. Стоит 2013 Access,Excel ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 12:10 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Владимир86, и этот файл прекрасно загрузился. Офис 2010. Это именно тот файл, что у вас не открывается? Владимир86Я тоже думал про настройки, отключал все политики безопастности, но не пропускает. Что именно вы делали? Уровень безопасности макросов в Ёкселе вы понижали? Т.е. в настойках ленты включить флажок "Разработчик" и на этой вкладке - "безопасность макросов". ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 12:55 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев )Владимир86, и этот файл прекрасно загрузился. Офис 2010. Это именно тот файл, что у вас не открывается? Владимир86Я тоже думал про настройки, отключал все политики безопастности, но не пропускает. Что именно вы делали? Уровень безопасности макросов в Ёкселе вы понижали? Т.е. в настойках ленты включить флажок "Разработчик" и на этой вкладке - "безопасность макросов". Да файл этот. Да отключил все политики безопастности и в excel, и в access ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 13:03 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Владимир86[Да файл этот. Да отключил все политики безопастности и в excel, и в access Даже не знаю, чем вам помочь. Нужно попробовать на другом компе с Оф2013. Или попросить коллег на форуме. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 14:40 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
ДРУЗЬЯ, помогите протестировать в Office 2013 работоспособность данного кода с файлом во вложении. Большое спасибо! проблемы у меня ---> Код: vbnet 1.
, ошибка 3027 - Объект доступен только для чтения. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 16:40 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Владимир86, а скопировать все данные в новый чистый лист - пробовали? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 16:42 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
час58Владимир86, а скопировать все данные в новый чистый лист - пробовали? И копировать и новые книги, как в access, так и в excel, ничего не помогает. Сохранял в разные форматы excel и опять не помогло. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 17:15 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Владимир86, это как буд-то пароль на данные. ========================= Жаль у меня нет 2013 ... но что-то как то не понятно. -------------------------------------------- Такое бывает когда с другого компа приходит лист(книга) типа неизвестный издатель..... А другие данные, другие документы , как себя ведут? - все так? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 17:37 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
час58Владимир86, это как буд-то пароль на данные. ========================= Жаль у меня нет 2013 ... но что-то как то не понятно. -------------------------------------------- Такое бывает когда с другого компа приходит лист(книга) типа неизвестный издатель..... А другие данные, другие документы , как себя ведут? - все так? Вообще данная процедура не отрабатывает с любыми файлами. Какие другие данные? все остальное у меня работает=) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2016, 17:46 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Давайте иначе: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Теоретически это работает медленнее. Зато легко определяется пустой лист. ЗЫ. Ваш офис случайно не 64-битный? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 10:36 |
|
Макрос для быстрого импорта из Excel
|
|||
---|---|---|---|
#18+
Анатолий ( Киев )Давайте иначе: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Теоретически это работает медленнее. Зато легко определяется пустой лист. ЗЫ. Ваш офис случайно не 64-битный? Вы гений! Работает шайтан машина! Офис у меня 32 разрядный. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 14:10 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1613163]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 147ms |
0 / 0 |