powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Макрос для быстрого импорта из Excel
40 сообщений из 40, показаны все 2 страниц
Макрос для быстрого импорта из Excel
    #39299388
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!
Есть два десятка excel-файлов. Регулярно требуется часть листов с этих файлов импортировать в Access-файлы с теми же именами файлов.
Как я решал эту задачу. Импортировал каждый лист каждого файла и сохранял опции импорта в меню "Сохраненные операции импорта". В дальнейшем, запуская импорт по сохраненным параметрам, обновлял нужные таблицы.
Все это хорошо... Но обновление баз даже с применением сохранения настроек занимает довольно продолжительное время. Подскажите, пожалуйста, можно ли это автоматизировать? Есть опыт написания макросов в Excel.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39299430
barbacucaЕсть опыт написания макросов в Excel. Т.е. с VBA вы знакомы.
Напишите процедуру, в которой многократно вызывайте метод DoCmd.TransferSpreadsheet, подставляя путь к файлу, имя листа и имя таблицы.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39299946
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
спасибо, все получилось...
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39299952
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
А не подскажете, как сделать так, чтобы данные не добавлялись в таблицу, а заменяли существующие (с сохранением типа данных у полей)
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39299955
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
спасибо. справился сам.
CurrentProject.Connection.Execute ("DELETE * FROM Tabl;")
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39300155
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
Что то у меня все слишком сложно получается... Может поможете с написанием кода для решения следующей задачи:
1. В текущем Access файле M.accdb нужно удалить все таблицы.
2. Из файла M.xlsm нужно загрузить данные. Имена таблиц должны соответствовать именам листов в Excel-файле. Имена полей - именам заголовков (первая строка). Проигнорировать лист с именем "ПереченьМОП".
Обновление полей не подходит, поскольку количество столбцов и их имена не всегда совпадают.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39300320
barbacuca1. В текущем Access файле M.accdb нужно удалить все таблицы.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub DeleteAllTables()
Dim db As Database, i As Integer, sName As String

    Set db = CurrentDb
    For i = db.TableDefs.Count - 1 To 0 Step -1
        sName = db.TableDefs(i).Name
'Debug.Print sName
     If sName Like "MSys*" Then
        'system tables
     Else
        db.TableDefs.Delete sName
     End If
    Next
End Sub


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.
Sub ImportFromExcel()
Dim db As Database, i As Integer, sName As String, sFilePath

    sFilePath = CurrentProject.Path & "\" & "M.xlsm"
    'Удаляем таблицы
    Call DeleteAllTables
    
    'Открываем файл Excel как БД
    Set db = OpenDatabase(sFilePath, False, True, "Excel 12.0 Xml;")
    For i = 0 To db.TableDefs.Count - 1
    'Возвращает имена листов (с "$" в конце) и имена интервалов.
        sName = db.TableDefs(i).Name
     If sName Like "*$" Then
        'Обрабатываем только листы
'Debug.Print sName
        sName = Left$(sName, Len(sName) - 1)
        If sName <> "ПереченьМОП" Then
        'Импортируем текущий лист
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, sName, sFilePath, True, sName & "$"
        End If
     End If
    Next
End Sub
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39300761
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
спасибо огромное! Очень выручили!
VBA заругалась на 'Dim db As Database'. Compile error: Expected user-defined type, not project
Закомментировал и все заработало...

ps Хотелось бы выразить материальное поощрение. Сообщите в лс номер банковской карты
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39300764
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
barbacucaЗакомментировал и все заработало...
Вот это не очень хорошо. Значит у вас в модуле в самом начале не стоит
Код: vbnet
1.
Option Explicit


и можно использовать необъявленные переменные, что рано или поздно приведет к ошибкам, которые будет сложно найти. Добавьте эту опцию в каждый модуль, а в VBA редакторе поставьте галочку
Tools->Options->Editor->Require Variable Declarations, чтобы в создаваемых модулях эта опция ставилась автоматически.

То, что у вас не опознался тип Database значит, скорее всего, что не подключена библиотека Microsoft Office Database Engine Object Library (Tools->References)
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39300771
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,
вроде подключено (см. скриншот). Но объявлять переменную не хочет (((
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39300773
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShin,
пытаюсь удалить поле:
Код: plaintext
db.TableDefs(i).Fields(j).Delete
Видимо неправильно )) Подскажите, что не так?
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39300995
barbacucaХотелось бы выразить материальное поощрение.
"спасибо огромное!" меня устраивает, на то и форум. Хотите поощрить - выпейте за мое здоровье.

barbacucadb.TableDefs(i).Fields(j).Delete Это неправильно. У поля нет метода Delete, он есть в коллекции Fields.

Надо так:
Код: vbnet
1.
2.
3.
With db.TableDefs(i").Fields
    .Delete .Item(j).Name
End With

А что это вы такое делаете? Да еще в цикле по таблицам и их полям?

barbacucaVBA заругалась на Dim db As Database Странно! В ObjectBrowser-е есть библиотека DAO? Если набираете Dim db As DAO. - после точки вываливается список? Там есть Database?
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39301045
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),

>> А что это вы такое делаете? Да еще в цикле по таблицам и их полям?
В дополнение к тому макросу, что Вы написали, мне необходимо было удалить столбцы с именами "Служебное1", "Служебное2", и т.д.
после импорта
>> Если набираете Dim db As DAO. - после точки вываливается список? Там есть Database?
Список "вываливается" и DataBase там есть.

А подскажите, пожалуйста, как программно заставить все импортированные таблицы "открыться" для пользователя? Пробовал db.TableDefs(i).Open, db.TableDefs(i).Visible
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39301154
barbacucaА подскажите, пожалуйста, как программно заставить все импортированные таблицы "открыться" для пользователя? Пробовал db.TableDefs(i).Open, db.TableDefs(i).Visible Используйте DoCmd.OpenTable
barbacucaмне необходимо было удалить столбцы с именами "Служебное1", "Служебное2", и т.д. после импорта Сколько полей вы удаляете и сколько остается?
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39301159
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
Удаляются от 0 до 10 полей. А всего их от 40 до 70
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39301197
barbacucaУдаляются от 0 до 10 полей. А всего их от 40 до 70 Тогда ваш подход правильный. Если, конечно, вы перебираете поля в порядке убывания индекса (j).
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39301276
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
а подскажите, пожалуйста? есть ли в Access Личная книга макросов, по аналогии с Personal.xls в Excel?
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39301283
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос снят... Нашел...
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39304617
Владимир86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев )barbacuca1. В текущем Access файле M.accdb нужно удалить все таблицы.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub DeleteAllTables()
Dim db As Database, i As Integer, sName As String

    Set db = CurrentDb
    For i = db.TableDefs.Count - 1 To 0 Step -1
        sName = db.TableDefs(i).Name
'Debug.Print sName
     If sName Like "MSys*" Then
        'system tables
     Else
        db.TableDefs.Delete sName
     End If
    Next
End Sub


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.
Sub ImportFromExcel()
Dim db As Database, i As Integer, sName As String, sFilePath

    sFilePath = CurrentProject.Path & "\" & "M.xlsm"
    'Удаляем таблицы
    Call DeleteAllTables
    
    'Открываем файл Excel как БД
    Set db = OpenDatabase(sFilePath, False, True, "Excel 12.0 Xml;")
    For i = 0 To db.TableDefs.Count - 1
    'Возвращает имена листов (с "$" в конце) и имена интервалов.
        sName = db.TableDefs(i).Name
     If sName Like "*$" Then
        'Обрабатываем только листы
'Debug.Print sName
        sName = Left$(sName, Len(sName) - 1)
        If sName <> "ПереченьМОП" Then
        'Импортируем текущий лист
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, sName, sFilePath, True, sName & "$"
        End If
     End If
    Next
End Sub




У меня возникла проблема при моделировании. строчка
Код: vbnet
1.
 Set db = OpenDatabase(sFilePath, False, True, "Excel 12.0 Xml;") 

выдает ошибку: 3027 База данных или объект доступны только для чтения. Подскажите, как лечить?
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39305639
Владимир86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HELP!
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39305750
Владимир86У меня возникла проблема при моделировании. строчка
Код: vbnet
1.
 Set db = OpenDatabase(sFilePath, False, True, "Excel 12.0 Xml;") 

выдает ошибку: 3027 База данных или объект доступны только для чтения. Подскажите, как лечить? Именно на этой строке? У меня не выдает.
В этот момент файл закрыт? Если файл открывать вручную, ничего не сообщает? Редактировать можно? Это на любом файле, не только из этой группы?
Попробуйте True в 3-м аргументе (Только чтение) заменить на False.
Похоже, что-то с настройками безопасности файла или системы.
Может пришлете файл для опытов? Можно без данных.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39305798
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
возникла новая проблема... Некоторые поля в Excel имеют длину более 255 символов. Подскажите, пожалуйста как мне создать их в Access? Пробовал в запросе ТЕКСТ(999), МЕМО(999). Понимаю, что в корне не прав, но не знаю в какую сторону копать...
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39305939
При чтении из Excel команда TransferSpreadsheet или запрос используют драйвер, который определяет тип полей на выходе на основании данных в нескольких первых строках на
листе (16 что-ли). Что бы драйвер понял, что поле должно быть МЕМО, а не ТЕКСТ - в этих ячейках должно быть хоть одно значение с длиной более 255 символов.
Если у вас есть доступ к реестру и эта задача выполняется только на одном компе, то можно изменить значение параметра на ветке JET\EXCEL
Иначе самое простое - переставить строку с длинным текстом вверх.
Если это затруднительно - можно добавить строку (1-ю под заголовками) с длинным текстом в нужных ячейках (например 300 символов "я"). После импорта удалить эту запись в таблице.

ЗЫ. "Пробовал в запросе ТЕКСТ(999), МЕМО(999)" - о каком запросе речь?
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39305984
barbacuca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев ),
Спасибо. Помогло...
ps
про ТЕКСТ(999), МЕМО(999) - это бред. Я это понял позже. Нет смысла расширять размер поля, если он пришел уже урезанным.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39306102
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев ),

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Private Sub Кнопка0_Click()
Dim db As Database, i As Integer, sName As String, sFilePath
    sFilePath = CurrentProject.Path & "\" & "M.xls"
    'Открываем файл Excel как БД
    Set db = OpenDatabase(sFilePath, False, True, "Excel 8.0;HDR=NO;IMEX=1")
    For i = 0 To db.TableDefs.Count - 1
    'Возвращает имена листов (с "$" в конце) и имена интервалов.
        sName = db.TableDefs(i).Name
     If sName Like "*$" Then
        'Обрабатываем только листы
        sName = Left$(sName, Len(sName) - 1)
        If sName <> "ПереченьМОП" Then
        'Импортируем текущий лист
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, "Таблица_" & sName, sFilePath, True, sName & "$"
        End If
     End If
    Next
End Sub




У меня этот код таблицы создаёт, а данные не перекидывает.
только одну пустую строку в таблице, при повторном запуске кода - ещё строку в таблице создаёт.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39306361
час58У меня этот код таблицы создаёт, а данные не перекидывает. Если таблицы создает, значит TransferSpreadsheet выполняется. Вы уверены в своем файле? Если импорт выполнить вручную - данные зальются?
Киньте файл для опытов.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39306371
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев ),
файл для опытов
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39306427
час58файл для опытов Это вы прикольнулись с файлом или он реально такой?
Тем не менее три таблицы создались. Две, как и положено, пустые, а данные с Лист3 загрузились. Единственное замечание - методу TransferSpreadsheet указано, что заголовки есть, а на листе их нет.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39306431
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ( Киев ),
это я эксперимент делал. и вот такой файл использовал.
----------------------------
Спасибо.
(лист-то был № 3 - вот я лох...)
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39307503
Владимир86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев )Владимир86У меня возникла проблема при моделировании. строчка
Код: vbnet
1.
 Set db = OpenDatabase(sFilePath, False, True, "Excel 12.0 Xml;") 

выдает ошибку: 3027 База данных или объект доступны только для чтения. Подскажите, как лечить? Именно на этой строке? У меня не выдает.
В этот момент файл закрыт? Если файл открывать вручную, ничего не сообщает? Редактировать можно? Это на любом файле, не только из этой группы?
Попробуйте True в 3-м аргументе (Только чтение) заменить на False.
Похоже, что-то с настройками безопасности файла или системы.
Может пришлете файл для опытов? Можно без данных.

Ex- закрыт, вообще делал на разных файлах, не дает выполнение=(Я тоже думал про настройки, отключал все политики безопастности, но не пропускает. Файл во вложении, данные могут быть любыми. Стоит 2013 Access,Excel
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39307532
Владимир86, и этот файл прекрасно загрузился. Офис 2010.
Это именно тот файл, что у вас не открывается?
Владимир86Я тоже думал про настройки, отключал все политики безопастности, но не пропускает. Что именно вы делали? Уровень безопасности макросов в Ёкселе вы понижали? Т.е. в настойках ленты включить флажок "Разработчик" и на этой вкладке - "безопасность макросов".
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39307537
Владимир86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев )Владимир86, и этот файл прекрасно загрузился. Офис 2010.
Это именно тот файл, что у вас не открывается?
Владимир86Я тоже думал про настройки, отключал все политики безопастности, но не пропускает. Что именно вы делали? Уровень безопасности макросов в Ёкселе вы понижали? Т.е. в настойках ленты включить флажок "Разработчик" и на этой вкладке - "безопасность макросов".

Да файл этот. Да отключил все политики безопастности и в excel, и в access
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39307634
Владимир86[Да файл этот. Да отключил все политики безопастности и в excel, и в access Даже не знаю, чем вам помочь. Нужно попробовать на другом компе с Оф2013.
Или попросить коллег на форуме.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39307798
Владимир86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
Sub DeleteAllTables()
Dim db As Database, i As Integer, sName As String

    Set db = CurrentDb
    For i = db.TableDefs.Count - 1 To 0 Step -1
        sName = db.TableDefs(i).Name
'Debug.Print sName
     If sName Like "MSys*" Then
        'system tables
     Else
        db.TableDefs.Delete sName
     End If
    Next
End Sub

Sub ImportFromExcel()
Dim db As Database, i As Integer, sName As String, sFilePath

    sFilePath = CurrentProject.Path & "\" & "M.xlsm"
    'Удаляем таблицы
    Call DeleteAllTables
    
    'Открываем файл Excel как БД
    Set db = OpenDatabase(sFilePath, False, True, "Excel 12.0 Xml;")
    For i = 0 To db.TableDefs.Count - 1
    'Возвращает имена листов (с "$" в конце) и имена интервалов.
        sName = db.TableDefs(i).Name
     If sName Like "*$" Then
        'Обрабатываем только листы
'Debug.Print sName
        sName = Left$(sName, Len(sName) - 1)
        If sName <> "ПереченьМОП" Then
        'Импортируем текущий лист
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, sName, sFilePath, True, sName & "$"
        End If
     End If
    Next
End Sub



ДРУЗЬЯ, помогите протестировать в Office 2013 работоспособность данного кода с файлом во вложении. Большое спасибо!
проблемы у меня --->
Код: vbnet
1.
 Set db = OpenDatabase(sFilePath, False, True, "Excel 12.0 Xml;") 

, ошибка 3027 - Объект доступен только для чтения.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39307800
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир86,

а скопировать все данные в новый чистый лист - пробовали?
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39307836
Владимир86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
час58Владимир86,

а скопировать все данные в новый чистый лист - пробовали?
И копировать и новые книги, как в access, так и в excel, ничего не помогает. Сохранял в разные форматы excel и опять не помогло.
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39307858
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир86,

это как буд-то пароль на данные.
=========================
Жаль у меня нет 2013 ...
но что-то как то не понятно.
--------------------------------------------
Такое бывает когда с другого компа приходит лист(книга)
типа неизвестный издатель.....

А другие данные, другие документы , как себя ведут? - все так?
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39307866
Владимир86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
час58Владимир86,

это как буд-то пароль на данные.
=========================
Жаль у меня нет 2013 ...
но что-то как то не понятно.
--------------------------------------------
Такое бывает когда с другого компа приходит лист(книга)
типа неизвестный издатель.....

А другие данные, другие документы , как себя ведут? - все так?

Вообще данная процедура не отрабатывает с любыми файлами. Какие другие данные? все остальное у меня работает=)
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39308188
Давайте иначе:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub ImportFromExcel2()
Dim WB As Object, WS As Object, sName As String, sFilePath
    sFilePath = CurrentProject.Path & "\" & "Test.xlsm"
    
    Call DeleteAllTables
    
    'Получаем доступ к объектной модели рабочей книги.
    Set WB = GetObject(sFilePath)

    For Each WS In WB.Worksheets
         sName = WS.Name
     'Игнорируем пустые листы.
     If WS.UsedRange.Address(0, 0) <> "A1" Then
        If sName <> "ПереченьМОП" Then
        'Импортируем текущий лист
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, sName, sFilePath, True, sName & "$"
        End If
     End If
    Next
End Sub

Теоретически это работает медленнее. Зато легко определяется пустой лист.

ЗЫ. Ваш офис случайно не 64-битный?
...
Рейтинг: 0 / 0
Макрос для быстрого импорта из Excel
    #39308423
Владимир86
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Анатолий ( Киев )Давайте иначе:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub ImportFromExcel2()
Dim WB As Object, WS As Object, sName As String, sFilePath
    sFilePath = CurrentProject.Path & "\" & "Test.xlsm"
    
    Call DeleteAllTables
    
    'Получаем доступ к объектной модели рабочей книги.
    Set WB = GetObject(sFilePath)

    For Each WS In WB.Worksheets
         sName = WS.Name
     'Игнорируем пустые листы.
     If WS.UsedRange.Address(0, 0) <> "A1" Then
        If sName <> "ПереченьМОП" Then
        'Импортируем текущий лист
            DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, sName, sFilePath, True, sName & "$"
        End If
     End If
    Next
End Sub

Теоретически это работает медленнее. Зато легко определяется пустой лист.

ЗЫ. Ваш офис случайно не 64-битный?

Вы гений! Работает шайтан машина! Офис у меня 32 разрядный.
Спасибо.
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Макрос для быстрого импорта из Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]