|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
14.02.2016, 21:29 | #1 |
Регистрация: 20.12.2015
Сообщений: 7
|
Выбор данных из access в excel
Здравствуйте,
Подскажите, пожалуйста, как решить задачу. Нужно из таблицы в access выбрать данные по определенным условиям и вставить их в определенные ячейки в excel. Данных, которые нужно выбрать очень много, поэтому хотелось бы записать данные в рекордсет и потом через него выбирать данные по критериям. connDB.ConnectionString = "Provider=Microsoft.ace.oledb.12.0; data source=" & Path connDB.Open Set rs = connDB.Execute("Select * from " & Table) Range("A1").CopyFromRecordset rs Подскажите, можно ли вместо CopyFromRecordset написать условия, по которым будут выбираться данные и вставлять в определенные ячейки в excel?Спасибо |
14.02.2016, 22:29 | #2 | ||
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
Какой ответ Вы хотите получить на свой "не совсем сформулированный" вопрос?
Цитата:
Цитата:
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
||
15.02.2016, 01:31 | #3 |
Регистрация: 20.12.2015
Сообщений: 7
|
В Recordset будет скопировано таблица из access, состоящая из 5 столбцов, 4 столбца это условия а 5 столбец значение. Условия будут записаны в ячейки в excel. Например A1="Условие1", B2="Условие2", U1="Условие3", S9="Условие4". Нужно в макросе написать что если столбец1 в рекордсет равен ячейки А1 и столбец2 в рекордсет равен ячейки B2 и столбец 3 в рекродсет равен U1 и т. д., то в ячейку В1 выводится значение из столбца 5 в рекордсете. И таких значений, которые нужно будет получить будет 150 Спасибо.
|
15.02.2016, 09:59 | #4 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
Уже светлее. Осталось только прикрепить архив с базой таблицы и ексель куда должно вставляться, и 2-3 примера что должно получиться, и можно что-то думать
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
16.02.2016, 09:09 | #5 |
Регистрация: 20.12.2015
Сообщений: 7
|
Во вложении в access таблица в ней 4 условия и значение которое нужно получить. В excel файле на 1 листе разбросаны условия по которым нужно в ячейку B1 вывести значение. Если делать через select
cn.ConnectionString = "Provider=microsoft.ace.oledb.1 2.0; data source=" & Path cn.Open A = "select sum([myValue]) from Table where ([Condition1]= "A2" and [Condition2]= "B2" and [Condition3]= "C1" and [Condition4]= "D2" )" Cells(1,2) = cn.Execute(A).GetString То так как значений которые нужно получить 150, то операция выполняется долго. Можно ли, например, как то загнать все данные в recordset и из него уже по условиям выбирать данные. Нужно получилить значение в ячейку В1 по условиям, что Condition1=A2, Condition2=B2, Condition3=C1, Condition4=D2. Предполагается, что условия по которым будет выбираться значение будет выполняться через цикл. Спасибо. Последний раз редактировалось Bregra; 16.02.2016 в 09:13. |
18.02.2016, 09:53 | #6 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
Согласно заданию с екселя и данных таблицы, код похожий на Ваш
Код:
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
18.02.2016, 17:51 | #7 |
Регистрация: 20.12.2015
Сообщений: 7
|
Спасибо. А скажи, пожалуйста, если я
"Condition1='" & sht.Range("B5") & "' and " & _ "Condition2='" & sht.Range("G1") & "' and " & _ "Condition3='" & sht.Range("K1") & "' and " & _ "Condition4='" & sht.Range("N1") & "');" сделаю через цикл, в вашем коде, он каждый раз будет открывать базу данных и искать нужное значение? Я вопрос к тому задаю, что если он будет каждый раз обращаться к базе данных, то процесс будет очень долгим, потому что нужно выгрузить очень много данных |
18.02.2016, 20:13 | #8 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
Я не знаю.Ну набей какую-то тестовую таблицу, запустим в цикле и посмотрим что получается? Зачем думать как будет, быстро-медленно, если можно попробовать?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
19.02.2016, 17:27 | #9 |
Регистрация: 20.12.2015
Сообщений: 7
|
Cпасибо. Я попытался изменить код, во вложении пример, и сделать цикл, но почему то, он находит только первое значение, которое нужно найти, потом все время его использует. А во вторых, он вроде бы все время обращается к базе когда ищет значение. А если если база большая, и таблица к которой он обращается это запрос, состоящий из многих запросов, то такой цикл будет торомозить. Подскажите, пожалуйста, почему в вашем измененном коде, макрос находит только первое значение, другие значения он потом не ищет. Спасбио.
Public Sub test_db() connectionString = "Provider=Microsoft.ACE.OLEDB.1 2.0; Data Source=" & ActiveWorkbook.Path & "\Table.accdb; Jet OLEDB:Database;" Dim con As New ADODB.Connection Dim rst As New ADODB.Recordset Dim sSql As String Dim sht As Worksheets con.Open connectionString On Error GoTo errLabel For i = 1 To 24 A = Sheets("Sheet1").Cells(4 + i, 1) For i1 = 1 To 24 B = Sheets("Sheet1").Cells(4, 1 + i1) sSql = "Select sum(Value1) FROM Table1 WHERE (" & _ "Condition1='" & A & "' and " & _ "Condition2='" & B & "' and " & _ "Condition3='" & Sheets("Sheet1").Range("K1") & "' and " & _ "Condition4='" & Sheets("Sheet1").Range("N1") & "');" rst.Open sSql, con If Not rst.EOF Then Sheets("Sheet1").Cells(4 + i, 1 + i1) = rst.Fields(0).Value End If Next Next con.Close Exit Sub errLabel: Resume Next End Sub |
20.02.2016, 18:08 | #10 |
Форумчанин
Регистрация: 20.05.2012
Сообщений: 311
|
Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Добавление данных в access из excel | palazzio | Microsoft Office Access | 5 | 20.11.2013 08:31 |
Выбор данных из таблицы в форму (VBA+EXCEL) | MadStyle | Помощь студентам | 6 | 04.11.2013 23:00 |
Загрузка данных из Excel в Access | Zorg | Microsoft Office Excel | 12 | 02.08.2012 18:25 |
Импорт данных из Excel в Access | alexvav | БД в Delphi | 2 | 22.06.2012 16:17 |
Импорт-экспорт данных Excel-Access, и из Access-Excel | Людвиг | Microsoft Office Access | 3 | 27.10.2011 14:38 |