Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Постоянный экспорт в excel / 11 сообщений из 11, страница 1 из 1
30.06.2016, 15:58
    #39265651
Gerasimovich
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в excel
Можно ли экспортировать таблицу в access в excel. То есть, если я просто экспортирую один раз, то при последующих изменениях в таблице в бд, они не будут изменяться в экселе. Может надо в параметрах рыться или код писать, не знаю.
...
Рейтинг: 0 / 0
30.06.2016, 16:16
    #39265680
Аллюр Д.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в excel
А зачем это нужно?

Импортировали данные из базы в экселевский файл, и что дальше?
Пользователь открыл этот файл с импортированными в него данными, что-то исправил, а в исходной базе это не отразится!

Кажется, в Excell'е нет возможности "привязывать" страницу с какой-то таблице или запросу в базе. Можно написать код, который будет автоматически импортировать данные из базы при каждом открывании этого экселевского файла, но... Опять те же вопросы - зачем эта морока? И что делать с данными, которые пользователь изменил в экселевском файле?
...
Рейтинг: 0 / 0
30.06.2016, 17:31
    #39265785
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в excel
Аллюр Д.Кажется, в Excell'е нет возможности "привязывать" страницу с какой-то таблице или запросу в базе.

Та не, можно, причем еще и интервал обновлений информации настроить) Несколько вариантов ,через Query Excel, либо через ODBC.
...
Рейтинг: 0 / 0
30.06.2016, 17:45
    #39265804
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в excel
GerasimovichМожно ли экспортировать таблицу в access в excel. То есть, если я просто экспортирую один раз, то при последующих изменениях в таблице в бд, они не будут изменяться в экселе. Может надо в параметрах рыться или код писать, не знаю.

Посмотрите в настройках экселя настройку подключения через Query.

Лишних действий из аксесса по экспорту не надо будет делать. Вы подключаетесь в экселе к аксесовской таблице или запросу и при каждом открытии экселя (а также принудительном обновлении, либо через установленный интервал в свойствах ) информация будет абсолютно та же, как и в нужной таблице,либо запросе
...
Рейтинг: 0 / 0
01.07.2016, 11:43
    #39266207
Аллюр Д.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в excel
Сергей Лалов,

Спасибо за информацию, прикольно работает

Я вот только не понял - подключаю в Excell'е таблицу из mdb, вижу данные, но если меняю данные на странице Excell'я, то данные в таблицу базы не запишутся?
Или надо выбрать правильную настройку?
Там есть какие-то варианты, потыкался наудачу, на в таблицу, в mdb, новые данные всё равно не перенеслись
...
Рейтинг: 0 / 0
01.07.2016, 19:07
    #39266677
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в excel
Аллюр Д.Сергей Лалов,

Спасибо за информацию, прикольно работает

Я вот только не понял - подключаю в Excell'е таблицу из mdb, вижу данные, но если меняю данные на странице Excell'я, то данные в таблицу базы не запишутся?
Или надо выбрать правильную настройку?
Там есть какие-то варианты, потыкался наудачу, на в таблицу, в mdb, новые данные всё равно не перенеслись

Так автору по теме как раз и не надо организовать обратную связь ) А так реально в базовом варианте обратной связи нет. Это в принципе тоже не проблема, пять строк кода, только в экселе должно обязательно выноситься ключевое поле (или несколько ,если это запрос) и подключенная библиотечка аксесс в экселе. Очень просто.
Делал раньше на работе варианты аксесс+эксель , где эксель рисовал красивые графики (там поразнообразней и покрасивей и не грузит базу аксесс дополнительными объектами).

Если хотите, могу выслать код ,который пишется в экселе, он очень простой.
...
Рейтинг: 0 / 0
01.07.2016, 20:38
    #39266703
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в excel
[quot Сергей Лалов]Аллюр Д.Если хотите, могу выслать код ,который пишется в экселе, он очень простой.

А здесь выложить можно?
...
Рейтинг: 0 / 0
01.07.2016, 20:52
    #39266704
ИВП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в excel
Сорри.
Предыдущее сообщение для Сергея Лалова.
...
Рейтинг: 0 / 0
01.07.2016, 22:00
    #39266717
Аллюр Д.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в excel
Плюсанусь к ИВП - выкладывайте здесь, может ещё кому-то пригодится

А в какой версии Excell'я появилась эта возможность?
Сейчас попробовал дома в 2003 Офисе - вроде нет такой функции, а на работе смотрел в 2010 - есть
...
Рейтинг: 0 / 0
01.07.2016, 22:14
    #39266720
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в 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.
24.
25.
26.
27.
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim PrimaryKey As Integer 'поле ,содержащее ключ из таблицы аксесса
    Dim FieldTableHeader As String ' заголовок поля таблицы экселя, должен быть один и тот же для аксесса
    Dim lastRow As String
    lastRow = Cells(Rows.Count, "C").End(xlUp).Row ' ищет координаты последней строки последнего поля C
    Set KeyCells = Range("A1:" & "C" & lastRow)  'определяем тыкальный диапазон ))) таблица начинается с Координат А
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then ' если тыкнули вне диапазона, то ничего не происходит

If IsNull(Intersect(Columns(1), Rows(Target.Row))) Then
MsgBox "Отсутствует значение ключевого поля для обновления в MS access " 'выбираем значение пересечения текущей ячейки текущей строки и первого столбца
 Else
 PrimaryKey = Intersect(Columns(1), Rows(Target.Row)) ' присваиваем значение переменной ключевого поля
 FieldTableHeader = Cells(1, Target.Column) 'находим название столбца таблицы выделенной ячейки
 
 StrSQL = "UPDATE ваша_таблица SET [" & FieldTableHeader & "] = " & Target & " WHERE ваша_таблица.[ваше_ключевое_поле]= " & PrimaryKey 'собираем запрос
 
Dim db As Database
Set db = OpenDatabase("C:\путь_к_базе\ваша_база.mdb") 'открываем базу mdb
db.Execute (StrSQL) 'выполняем запрос
db.Close
Set db = Nothing

 End If
   End If
End Sub



Работает с mdb, с accdb не проверял. В общем автоматически выгружается таблица из аксесса в экселе, а в самом экселе на событие изменения данных листа написана обработка и внесение данных измененных из экселя в аксесс.
Нужно подключить две библиотеки, Microsoft Access ... и DAO, к примеру 3.6

В 2003м аксессе Microsoft Query есть где то наверное, потому что конструктор Microsoft Query выглядит древним ,наверняка экспортировали из ранних версий аксесса.
...
Рейтинг: 0 / 0
01.07.2016, 23:02
    #39266734
Сергей Лалов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Постоянный экспорт в excel
Немного допилил код. Добавил экранирование текстовых значений полей. А также обработку поля экселя,если какое то значение удаляется. То есть вставляемое NULL

Код: 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.
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range
    Dim PrimaryKey As Integer 'поле ,содержащее ключ из таблицы аксесса
    Dim FieldTableHeader As String ' заголовок поля таблицы экселя, должен быть один и тот же для аксесса
    Dim lastRow As String
    lastRow = Cells(Rows.Count, "C").End(xlUp).Row ' ищет координаты последней строки последнего поля C
    Set KeyCells = Range("A1:" & "C" & lastRow)  'определяем тыкальный диапазон ))) таблица начинается с Координат А
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then ' если тыкнули вне диапазона, то ничего не происходит

If IsNull(Intersect(Columns(1), Rows(Target.Row))) Then
MsgBox "Отсутствует значение ключевого поля для обновления в MS access " 'выбираем значение пересечения текущей ячейки текущей строки и первого столбца
 Else
 PrimaryKey = Intersect(Columns(1), Rows(Target.Row)) ' присваиваем значение переменной ключевого поля
 FieldTableHeader = Cells(1, Target.Column) 'находим название столбца таблицы выделенной ячейки
 If IsNull(Target) Then Target = " " 'если значение удаляется
 StrSQL = "UPDATE ваша_таблица SET [" & FieldTableHeader & "] = " & ("'" & Target & "'") & " WHERE ваша_таблица.[код_счетчик]= " & PrimaryKey 'собираем запрос
 
Dim db As Database
Set db = OpenDatabase("C:\Users\HOME\Desktop\тест.mdb") 'открываем базу mdb
db.Execute (StrSQL) 'выполняем запрос
db.Close
Set db = Nothing
  End If
   End If
    
End Sub



Приложил два тестовых файла базы и экселя в письме. Там путь до своей базы в коде пропишите свой. Либо можно использовать currentProject.Path, но мне лень менять библиотеки и писать в ADO.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Постоянный экспорт в excel / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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