Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.62/39: Рейтинг темы: голосов - 39, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 01.12.2014
Сообщений: 12

Импорт таблицы excel в access

01.12.2014, 07:26. Показов 8308. Ответов 89
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.

Очень нужна Ваша помощь! Есть таблица excel её нужно перенести в access через vba, т.е. нажал кнопку таблица уже в access создана или через макрос. Заранее спасибо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2014, 07:26
Ответы с готовыми решениями:

Импорт таблицы из Excel в Access
Значит у меня есть таблица в акселе. Таблица представляей собой документ в котором находится разное множество записей. Все эти записи...

Импорт всей таблицы из Excel в Access
Только начинаю освоение Access, поэтому прошу помощи у знатоков. Есть форма, где по кнопке привязано открытие диалогового окна и...

Импорт таблицы excel в БД access 2003
Форумчане, доброго времени суток! Как запустить процедуру импорта в БД Аксесс кнопкой? Импортируемый файл скорее всего будет с...

89
Модератор
Эксперт MS Access
 Аватар для shanemac51
12512 / 5086 / 814
Регистрация: 07.08.2010
Сообщений: 14,974
Записей в блоге: 4
24.01.2017, 18:21
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Dmitry_Morozov Посмотреть сообщение
А может и я настрой первого ответчика не так понял и погорячился, тяжело сказать...
я тоже не поняла, что вам надо --это весьма редко со мной бывает

возможно так

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
s= "INSERT INTO [paste_to] ( [pField1], [pField2], [pField3], [pField4], [pField5], [pField6], " _
     " [pField7], [pField8])" & _
     " SELECT [copy_from].[cField1], [copy_from].[cField2], [copy_from].[cField3], [copy_from].[cField4], " _
     "    [copy_from].[cField5], [copy_from].[cField6], [copy_from].[cField7], [copy_from].[cField8]" & _
     " FROM [paste_to] inner JOIN [copy_from] " _
     "    ON [paste_to].[pField2] = [copy_from].[cField2]"
s =replace(s,"[paste_to]","[paste_to]")
s=replace(s,"[pField1]","[cField1]")
 
...
docmd.runsql s
имена замен можно взять из вашей таблицы замен, циклом по таблице
0
21 / 4 / 0
Регистрация: 03.01.2017
Сообщений: 127
26.01.2017, 20:31
Заметил, что при подсчете измененных записей запросом delete
вместо
Visual Basic
1
2
3
nStart=currentdb.tabledefs("ИмяПриемнойТаблицы").recordcount
'запрос с delete
nEnd=currentdb.tabledefs("ИмяПриемнойТаблицы").recordcount
следует использовать
Visual Basic
1
2
3
nStart = currentdb.OpenRecordset("ИмяПриемнойТаблицы").RecordCount
'запрос с delete
nEnd = currentdb.OpenRecordset("ИмяПриемнойТаблицы").RecordCount
Первое не работает, т.к. насколько я понял таблица не успевает обновляться, чтоли. Есть ли какое нибудь выражение на обновление записей после запроса в таблице?
Спасибо!

Добавлено через 23 часа 38 минут
Цитата Сообщение от mobile Посмотреть сообщение
Я не знаю, что Вы имеете в виду под "копированием". Варианты самые различные. Но предположим, что на кнопке формы как-то выполняется копирование данных из одной таблицы в другую. Необходимость этого спорного действия оставим за скобками.
В процедуре на кнопке до копирования выясняем сколько записей в приемной таблице, сколько после и даем сообщение
Visual Basic
1
2
3
4
5
dim nStart
nStart=currentdb.tabledefs("ИмяПриемнойТаблицы").recordcount
'Делаем копирование
'Определяем сколько записей в таблице после копирования и даем сообщение
msgbox "Скопировано " & currentdb.tabledefs("ИмяПриемнойТаблицы").recordcount - nStart & " записей"
Коллеги, привет, не подскажете, можно ли как то одной командой выделить сразу все поля таблицы, что-то вроде

Visual Basic
1
DB.Execute "INSERT INTO [TABLE_TEST] ([All])...
Заранее спасибо!
0
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
26.01.2017, 20:36
Цитата Сообщение от Dmitry_Morozov Посмотреть сообщение
не подскажете, можно ли как то одной командой выделить сразу все поля таблицы
Если количество полей совпадает и Вы точно знаете, что их порядок в селекте соответствует порядку в приемной таблице, то поля можно вообще не писать
Visual Basic
1
db.Execute "INSERT INTO [TABLE_TEST] select * from Таблица"
1
21 / 4 / 0
Регистрация: 03.01.2017
Сообщений: 127
26.01.2017, 21:03
Mobile, приветствую, огромное спасибо!

Можно еще вопрос, допустим есть таблица, как мне перебрать все значения (второго поля, например) до конца таблицы (рекордсета) циклом. Пример ниже перебирает поля первой записи, не понимаю как переключиться на значения n-го поля.
Заранее Спасибо!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Dim DB As DAO.Database
Set DB = CurrentDb
Dim Table As DAO.TableDef
Set Table = DB.TableDef("LOOP_CHECK")
 
n = Table.RecordCount
 
i=0
Do While i<n+1
  Table.Move (i)
  MsgBox (Table.Fields(i))
  questionbox = MsgBox("Show next i?", vbQuestion + vbYesNo)
       If questionbox= vbYes Then
          i=i+1
       Else
             Exit Sub
       End If
Loop
Exit Sub
0
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
26.01.2017, 21:16
Visual Basic
1
2
3
4
5
6
7
Dim tbl As DAO.Recordset                 'Не стоит использовать зарезервированные имена
Set tbl = DB.Openrecordset("LOOP_CHECK") 'Таблдеф не нужен. Сразу открываем рекордсет
 
Do until tbl.EOF   'Цикл до конца рекордсета.
  msgbox tbl(1)    'Нумерация полей рекордсета начинается 0. Второе поле - индекс 1
  tbl.movenext     'Переходим на след.запись
Loop
1
21 / 4 / 0
Регистрация: 03.01.2017
Сообщений: 127
26.01.2017, 21:49
Изучаем дальше, mobile, огромное спасибо за помощь!

Добавлено через 26 минут
Mobile, этот цикл хочу использовать для выполнения запросов insert select where, то есть для значений i выполнять sql запросы, какие то поля можно не вставлять, добавив условия для i. Как по Вашему, это плохая идея? Если нет, можно ли сразу пробегать по названиям полей таблицы имходника, не вынося их в отдельную таблицу?
Спасибо!!
0
Эксперт MS Access
26828 / 14509 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
26.01.2017, 22:02
Нет общего ответа. Иногда делают и так как Вы хотите. Но как правило, делать инсерты на каждой записи из прохода по рекордсету очень неэффективно. Обычно стараются сделать один общий запрос, учитывающий детали. Это значительно быстрее, особенно для больших наборов данных. Но если такой общий запрос не получается сделать (по разным причинам, иногда принципиальным, когда запросы уж очень сильно отличаются , иногда просто не могут сотворить вот такой универсальный запрос), то бывает и так.
0
21 / 4 / 0
Регистрация: 03.01.2017
Сообщений: 127
26.01.2017, 23:06
У меня получаются очень массивные запросы из за необходимости импорта большого количества таблиц с большим количеством столбцов, хотел упростить запросы
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12512 / 5086 / 814
Регистрация: 07.08.2010
Сообщений: 14,974
Записей в блоге: 4
27.01.2017, 07:37
Цитата Сообщение от Dmitry_Morozov Посмотреть сообщение
У меня получаются очень массивные запросы из за необходимости импорта большого количества таблиц с большим количеством столбцов, хотел упростить запросы
по вашей проблеме уже более 20 сообщений
--но до сих пор ни одного примера с достаточно точной структурой записи, данные могут быть и условные, но с сохранением типа поля

короче, продолжается игра ***угадайте, в чем мои проблемы***
0
21 / 4 / 0
Регистрация: 03.01.2017
Сообщений: 127
27.01.2017, 16:18
shanemac51, проблем нет, вопросы есть. предыдущее сообщение - просто аргумент для использования запроса через цикл, уточнил у mobile работоспособность такой реализации.mobile, думаю, меня понял, судя по его ответу, за что ему огромное спасибо.

Добавлено через 6 часов 24 минуты
а вот теперь есть и проблемка=(

То ли конструкция изначально неверная, то ли не могу догнать куда поставить j=0, j=j+1

Цикл должен перебирать названия полей таблицы, после каждого названия поля выдавать соответсвующие значения всех записей таблицы, которые в нем (поле) содержатся.
Первую проходку по первому полю отрабатывает корректно. Для последующих полей выводятся только названия, значения записей не показывает. Подразумеваю, что связано это с тем, что в цикле всегда 0 значение для j, следовательно перебирается только самое первое поле таблицы. Пример, наверное, не получит приминения, делал чтобы разобраться.
Заранее спасибо за помощь, если я достаточно подробно изложил суть проблемы
Visual Basic
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
Dim DB As DAO.Database
Dim tbl, temp_tbl As DAO.Recordset
Dim i, n, j, n_fields_test_tbl, n_records_test_tbl As Integer
Dim curr_fld_name, curr_fld_value As String
Dim s As String
Set DB = CurrentDb
Set tbl = DB.OpenRecordset("TABLE_TEST")
Set temp_tbl = DB.OpenRecordset("TEMP_TABLE_TEST")
 
n_fields_temp_tbl = temp_tbl.Fields.Count
n_records_temp_tbl = temp_tbl.RecordCount
 
i = 0
j = 0
Do While i < n_fields_temp_tbl
 
    curr_fld_name = temp_tbl.Fields(i).Name
    MsgBox curr_fld_name
 Do While j < n_records_temp_tbl
            Do Until temp_tbl.EOF
                   MsgBox temp_tbl(j)
                    temp_tbl.MoveNext
            Loop
j = j + 1
Loop
    i = i + 1
Loop
End Sub
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,383
31.01.2017, 08:12
Цитата Сообщение от Dmitry_Morozov Посмотреть сообщение
Dim i, n, j, n_fields_test_tbl, n_records_test_tbl As Integer
все variant, а один n_records_test_tbl - integer.
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12512 / 5086 / 814
Регистрация: 07.08.2010
Сообщений: 14,974
Записей в блоге: 4
31.01.2017, 09:11
переставьте строку
Visual Basic
1
2
3
   MsgBox curr_fld_name
j=0
 Do While j < n_records_temp_tbl
0
21 / 4 / 0
Регистрация: 03.01.2017
Сообщений: 127
02.02.2017, 11:21
Всем привет, спасибо за варианты!
0
21 / 4 / 0
Регистрация: 03.01.2017
Сообщений: 127
07.03.2017, 21:14
Добавлено через 19 часов 22 минуты
Коллеги, привет!

Столкнулся с ситуацией, где нужно построить запрос на создание таблицы. Таблица строится из таблиц, в которых в том числе есть вычисляемые поля.

Как это грамотнее всего обойти?

От вычисляемых полей отказываться не хотелось бы

Спасибо!

Добавлено через 4 часа 54 минуты
Надо ведь просто создать Отчет!!!!!!=))
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12512 / 5086 / 814
Регистрация: 07.08.2010
Сообщений: 14,974
Записей в блоге: 4
07.03.2017, 21:19
Цитата Сообщение от Dmitry_Morozov Посмотреть сообщение
Надо ведь просто создать Отчет!!!!!!=))
для этого не обязательны вычисляемые поля
1
21 / 4 / 0
Регистрация: 03.01.2017
Сообщений: 127
07.03.2017, 21:23
Да, именно поэтому вариант подошел.

Это была конечная цель цепочки-вывод заявки из базы в эксель, далее в почту
0
Эксперт MS Access
 Аватар для Eugene-LS
13271 / 5948 / 1529
Регистрация: 05.10.2016
Сообщений: 16,652
07.03.2017, 21:36
Цитата Сообщение от costolom Посмотреть сообщение
помогите разобрать код
Весь???!!!
А давайте только то что не понятно ...
Например:
Visual Basic
1
GrbsT = ActiveWorkbook.Worksheets(2).Range("C5").Value
Присвоение переменной значения из ячейки "C5", из листа с индексом 2, насколько я могу судить.
0
21 / 4 / 0
Регистрация: 03.01.2017
Сообщений: 127
08.03.2017, 00:06
Коллеги, работаю над экспортом отчета в эксель файл.

Код ниже выдаёт ошибку 1004, читал про неё, как пофиксить мой код не понял. Может надо создать книгку с одним листом??
Если код ниже вообще не нужен для экспорта отчета в эксель с заданием названия книги через инпутбокс, как тогда быть?
Заранее спасибо!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim app As Object
Dim wb As Object
 
 
Set app = CreateObject("Excel.Application")
 
With app
.workbooks.Add
 
.Visible = True
.Save ("C:\Users\X\Desktop\name.xlsx")
.workbooks.Open ("C:\Users\X\Desktop\name.xlsx")
 
End With
end sub
0
Эксперт MS Access
 Аватар для Eugene-LS
13271 / 5948 / 1529
Регистрация: 05.10.2016
Сообщений: 16,652
08.03.2017, 01:46
Цитата Сообщение от Dmitry_Morozov Посмотреть сообщение
Код ниже выдаёт ошибку 1004
у меня отрабатывает так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim app As Object
Dim wb As Object
 
Set app = CreateObject("Excel.Application")
 
    With app
        Set wb = .Workbooks.Add
        .Visible = True
    End With
    wb.SaveAs ("D:\Temp\name.xlsx")
Я так понимаю, что метод Save - только к уже существующему файлу (ранее сохранённому).
1
21 / 4 / 0
Регистрация: 03.01.2017
Сообщений: 127
08.03.2017, 13:09
Eugene-LS, спасибо, работает, видимо, Вы правы, насчет save для уже сохраненных файлов

Спасибо!

Добавлено через 46 минут
Не совсем могу понять, разве команда ниже не должна просто создавать эксель файл по заданному FileName? и при наличии False в конце не открывать его (эксель файл)? Как указать путь к файлу?

По факту вылезает окно с предложением выбора приложения, с помощью которого следует открыть получившийся файл, среди которых нет экселя.

В чем ошибка? Спасибо!
Visual Basic
1
DoCmd.OutputTo acOutputReport, "Create_REQ", acFormatXLS, FileName, False
Добавлено через 11 минут
Разобрался, не хватало .xls в FileName

Добавлено через 6 минут
Можно как-то добавить путь к файлу?

Добавлено через 2 минуты
Тоже разобрался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.03.2017, 13:09

Импорт таблицы Excel с изображениями в таблицу access
Всем привет! Ребята, нужна помощь. Есть таблица Excel, в которой есть несколько столбцов с различными типами данных. Один из столбцов...

Импорт из Excel таблицы с гиперссылками в Access. Передается только текст
При импорте из Excel в Access таблицы с гиперссылками в Access передается только текст. В свое время пришлось исправлять это программно...

Импорт таблицы Excel в БД Access через VBA через кнопку в Excel
Форумчане, помогите, пожалуйста с кодом макроса в excel. Задача состоит в следующем:в файле обработчик через кнопку импортировать данные...

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

Импорт данных из Excel в Access - MS Access
Добрый день, очень нужна помощь. Поля в таблице access: Name - текстовый Surname - текстовый Father name - текстовый Birth...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru