Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.61/103: Рейтинг темы: голосов - 103, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
1

Импорт данных из Excel в Access

06.02.2016, 19:44. Показов 20618. Ответов 64
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, очень нужна помощь.

Как автоматически с помощью кода VBA (по нажатию кнопки) импортировать данные из определенной ячейки таблицы Excel в определенный атрибут таблицы Access?

Получилось только импортировать несколько ячеек подряд в таблицу (без выбора атрибута, все хаотично), но это не то, что нужно:
Visual Basic
1
2
3
4
5
6
Private Sub Кнопка0_Click()
 
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, _
 "exportSample", "D:\Sample.xlsx", True, "A1:G5"
 
End Sub
С помощью данного кода выбираются вручную файлы Excel формата и после нажатия импортируются все данные подряд из таблицы Excel в таблицу Access.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub Кнопка13_Click()
 
Dim FName As String
Dim result As Integer
With Application.FileDialog(1)
   .Title = "Select file"
   .InitialFileName = "D:\DB" 'default path Путь по умолчанию
   .AllowMultiSelect = False
   .Filters.Clear
   .Filters.Add "MS Excel", "*.xlsx", 1
result = .Show
 
If result = 0 Then Exit Sub
FName = Trim(.SelectedItems.Item(1))
End With
 
 
DoCmd.TransferSpreadsheet aclImport, , "importSample", FName, True
 
End Sub
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2016, 19:44
Ответы с готовыми решениями:

Экспорт-импорт данных Excel-Access-Excel
Доброе время суток уважаемые форумчане. Приходит информация в экселевской таблице. Скидываю её в...

Импорт данных из excel в access
Доброе время суток! При создании базы данных я столкнулся с проблемой, которую пока не могу решить,...

Импорт данных из Excel в Access
День добрый, уважаемое сообщество! Прошу помощи в настройке импорта данных из Excel в Access....

Импорт данных из Excel в Access
При импорте нескольких страниц таблицы в базу (использовалась возможность связывания) не...

64
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
06.02.2016, 21:46 2
Нужно делать именно импорт или можно скопировать данные?
0
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
06.02.2016, 21:57  [ТС] 3
А в чем отличие, поясните пожалуйста? При импорте же данные не исчезают из таблицы Excel.
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
06.02.2016, 23:29 4
Цитата Сообщение от Ivan_Ivanovich Посмотреть сообщение
А в чем отличие, поясните пожалуйста? При импорте же данные не исчезают из таблицы Excel.
При импорте в Аксес появляется таблица, которой не было. При вставке данных таблица существует и до вставки, проосто после вставки в ей появляются новые данные.

Добавлено через 3 минуты
Но и то, и другое можно сделать запросом.

SQL
1
2
SELECT * INTO ИмяТаблицы
FROM [Лист1$] IN 'C:\irkaлова.xlsx'[Excel 12.0 XML; HDR=No;];
Добавлено через 39 секунд
SQL
1
2
3
INSERT INTO ИмяТаблицы
SELECT *
FROM [Лист1$] IN 'C:\irkaлова.xlsx'[Excel 12.0 XML; HDR=No;];
Добавлено через 2 минуты
Правите выражения Into и Select и таким способом определяете, какой й столбец Excel в какое поле Access.

Добавлено через 3 минуты
Скажем,

SQL
1
2
3
INSERT INTO ИмяТаблицы (Поле1, Поле2, Поле3)
SELECT F1, F4, F2
FROM [Лист1$] IN 'C:\irkaлова.xlsx'[Excel 12.0 XML; HDR=No;];
отправит 1 столбец в Поле1, 2й - в Поле3, 4й - в Поле2.
3
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
06.02.2016, 23:45  [ТС] 5
Спасибо за отзывчивость и помощь, но это не то.
Я загрузил пример таблицы Excel. Мне нужно, чтобы по нажатию кнопки (условно кнопка "Импорт") в форме, автоматом переносились определенные ячейки в атрибуты определенной таблицы. Например, ячейка R4C2 (2015/2016) в n-ную таблицу в атрибут Учебный год.
Вложения
Тип файла: xlsx Sample.xlsx (9.5 Кб, 53 просмотров)
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.02.2016, 00:13 6
А что такое n-ная таблица, извините?
1
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
07.02.2016, 00:17  [ТС] 7
Любая определенная таблица, дабы не уточнять название так написал.
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.02.2016, 00:28 8
Visual Basic
1
2
3
4
5
dim strSQL as string
strSQL = "INSERT INTO ИмяТаблицы (Учебный год) SELECT F2 "
strSQL = strSQL & "FROM [Лист1$] IN 'C:\путь\Sample.xlsx'[Excel 12.0 XML; HDR=No;] "
strSQL = strSQL & "WHERE F1='Учебный год'"
currentdb.execute strSQL
Добавлено через 1 минуту
Но вообще импортировать по одной ячейке это.... нерационально )))
0
Эксперт MS Access
26815 / 14494 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
07.02.2016, 00:47 9
В запросе можно считывать и определенные ячейки, блоки и даже по нескольку штук единовременно. Но стиль ссылок обычный - не R1C1, А1:А1. Воспользуясь примером texnik-san:
SQL
1
2
SELECT *
FROM [Лист1$B4:B4] AS x1, [Лист1$C4:D6] AS x2 IN 'C:\irkaлова.xlsx'[Excel 12.0 XML; HDR=No;];
Если одиночных ячеек много и расположение их нерегулярно, то гораздо эффективнее воспользоваться средствами автоматизации: открыть ексель, гулять по листу и писать в рекордсет таблицы.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Dim app as object, wrk as object
dim rst as dao.recordset
set rst=currentdb.openrecordset("select * from [n-я таблица]")
set app=createobject("excel.application")
set wrk=app.workbooks.open("путь\имяфайла.xls")
rst.addnew
rst![Учебный год]=range("C4")
rst![Другое поле]=range("F16")
...................................
rst.update
app.quit
2
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
07.02.2016, 01:06  [ТС] 10
Каждый раз одни и те же ячейки будут импортироваться, целью является автоматизировать эти действия.
А данный код где нужно прописывать? В кнопку вставил (где VBA код), вышло сообщение: "Ошибка 3134. Ошибка синтаксиса."
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Кнопка3_Click()
 
Dim strSQL As String
strSQL = "INSERT INTO Список образовательных программ (Учебный год) SELECT F2"
strSQL = strSQL & "FROM [Лист1$] IN 'D:\DB\Sample.xlsx'[Excel 12.0 XML; HDR=No;]"
strSQL = strSQL & "WHERE F1='Учебный год'"
CurrentDb.Execute strSQL
 
End Sub
Добавлено через 13 минут
Спасибо! Вот это мне нужно: "Если одиночных ячеек много и расположение их нерегулярно, то гораздо эффективнее воспользоваться средствами автоматизации: открыть ексель, гулять по листу и писать в рекордсет таблицы."
Попробовал, вышла ошибка, выделяя "range": "sub or function not defined".

Добавлено через 1 минуту
На данный код:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Кнопка3_Click()
 
Dim app As Object, wrk As Object
Dim rst As dao.Recordset
Set rst = CurrentDb.OpenRecordset("select * from [Список образовательных программ]")
Set app = CreateObject("excel.application")
Set wrk = app.workbooks.Open("D:\DB\Sample.xlsx")
rst.AddNew
rst![Учебный год] = range("C4")
 
rst.Update
app.Quit
 
 
End Sub
0
Эксперт MS Access
26815 / 14494 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
07.02.2016, 01:08 11
Ошибочка вышла. Забыл про родителей. А это всегда чревато
Visual Basic
1
2
rst![Учебный год]=app.range("C4")
rst![Другое поле]=app.range("F16")
2
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
07.02.2016, 01:25  [ТС] 12
А объясните пожалуйста для чего нужна вторая строка в данном случае, или это просто как продолжение Вы написали?
Visual Basic
1
rst![Другое поле]=app.range("F16")
Добавлено через 8 минут
Сейчас ошибок не выдается, но и не копируется ячейка R4C2. В атрибуте таблицы появляется новая запись, но она пуста.
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.02.2016, 01:59 13
Цитата Сообщение от Ivan_Ivanovich Посмотреть сообщение
вышло сообщение: "Ошибка 3134. Ошибка синтаксиса."
Потому что нужно по-человечески отвечать на просьбу уточнить имя таблицы. У вас в имени таблицы пробелы, такие имена нужно брать в квадратные скобки:

SQL
1
INSERT INTO [Список образовательных программ (Учебный год)] SELECT
Добавлено через 1 минуту
Цитата Сообщение от Ivan_Ivanovich Посмотреть сообщение
Сейчас ошибок не выдается, но и не копируется ячейка R4C2. В атрибуте таблицы появляется новая запись, но она пуста.
Дык вы зачем-то С4 копируете, а нужна В4
2
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
07.02.2016, 14:15  [ТС] 14
Спасибо большое, разобрался!
А не знаете как можно импортировать этим методом (rst![Учебный год]=app.range("B4")) или другим vba кодом определенную часть символов из ячейки? Например, есть ячейка с содержимым "2012/2013", нужно импортировать только первые 4 символа или, наоборот, последние 4 символа.
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
07.02.2016, 15:10 15
Left(app.range("B4"),4)
Right(app.range("B4"),4)
1
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
07.02.2016, 15:37  [ТС] 16
Спасибо!
0
Эксперт MS Access
7439 / 4574 / 300
Регистрация: 12.08.2011
Сообщений: 14,229
08.02.2016, 07:28 17
Цитата Сообщение от texnik-san Посмотреть сообщение
Но вообще импортировать по одной ячейке это.... нерационально )))
Это одинэснуто.

Добавлено через 2 минуты
INSERT INTO [Список учебных обще-образовательных программ на Учебный год средне-технического образовательного учреждения в редакции профессора Петренко Ильи Михайловича, созданный в начале 2015 учебного года и согласованный со всеми необходимыми инстанциями] SELECT
__................
0
0 / 0 / 0
Регистрация: 01.02.2016
Сообщений: 29
11.02.2016, 12:21  [ТС] 18
Добрый день, появился еще схожий вопрос. Возможно ли из ячейки таблицы Excel как-то импортировать информацию, находящуюся между символов?
1. Например, из ячейки с содержимым "бакалавриат, 3 курс" импортировать только цифру "3".
2. Или из ячейки "Студент: Иванов Иван Иванович", брать только "Иванов Иван Иванович", но только каким-то иным способом нежели здесь
PureBasic
1
Right(app.range("B4"),20)
, т.к. ФИО всегда будут разниться в количестве символов, можно сделать, например, чтобы импортировались последующие символы после символов "Студент: "?
0
шапоклякистка 8-го дня
3680 / 2240 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
11.02.2016, 12:41 19
Replace("app.range("B4")","Студент: ","")
1
902 / 292 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
11.02.2016, 12:42 20
Ivan_Ivanovich, Это вам нужно поиграться с текстовыми функциями VBA, такими как InStr, Mid, Replace и т.п. Составить конструкцию, которая бы забирала нужный фрагмент, не так и сложно, главное - четкий алгоритм...
1
11.02.2016, 12:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2016, 12:42
Помогаю со студенческими работами здесь

импорт данных из Excel в Access
Добрый день форумчане, очень нужна ваша поддержка, у меня такой вопрос: Как можно импортировать...

Импорт данных из Access в Excel
Доброго времени суток, подскажите пожалуйста, как можно осуществить импорт данных из Access в Excel...

Импорт данных в Excel из Access
Суть вопроса в том что есть клиент базы (база данных разделена) и иксель файл который используется...

Импорт данных из Excel в Access
Добрый день. Я недавно сел за Access. У меня возник вопрос: Как можно импортировать данные из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru