|
|
|
Передача данных на лист Excel из recordset
|
|||
|---|---|---|---|
|
#18+
Уважаемые форумчане. Прошу Вас помочь разобраться со следующей ситуацией. 1 Передаем на лист из recordset данные. Получаем таблицу Исполнитель Иванов Петров Сидоров Иванов Петров 2. Ставим в Excel фильтр по фамилии Сидоров, получаем видимую строку Исполнитель Сидоров обновляем recordset, фамилия Сидоров заменяется на фамилию Иванов Исполнитель Иванов Т.е. данные из recordset вставляются в первую отфильтрованную строку, а надо во вторую строку листа (ячейку “J2”). Так чтобы при включенном фильтре построчно обновились данные Иванов на Иванов, Петров на Петров, Сидоров на Сидоров. Чтобы строка с фамилией Сидоров осталась без изменений. Как это сделать? авторSub pr() Dim cn As New ADODB.Connection Dim cm As New ADODB.Command Dim rs As New ADODB.Recordset Dim fldLoop As Field Dim i As Integer Dim ws As Worksheet Set ws = Sheets(1) Application.ScreenUpdating = False Application.Calculation = xlCalculationManual cn.Provider = "Microsoft.Jet.OLEDB.4.0" cn.ConnectionString = "Data Source = D:\Книга3; Extended Properties=Excel 8.0;""" cn.Open cm.ActiveConnection = cn cm.CommandText = "SELECT Исполнитель FROM [Лист1$]" rs.Open cm Do While Not rs.EOF rs.MoveNext ws.Range("J" & 2).CopyFromRecordset rs Loop rs.Close cn.Close Application.Calculation = xlAutomatic Application.ScreenUpdating = True End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2011, 22:55 |
|
||
|
Передача данных на лист Excel из recordset
|
|||
|---|---|---|---|
|
#18+
Не понял юмора... Разъясните нам смысл вашего запроса с отбором только фамилий? Вернее, разъясните задачу полностью - для чего вы потом фильтруете этот список повторяющихся фамилий. И еще - а примерах на ADO надо хоть немного разбираться, а не тупо копировать все подряд. Особенно мне нравится использование цикла и .MoveNext совместно с .CopyFromRecordset ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2011, 01:06 |
|
||
|
Передача данных на лист Excel из recordset
|
|||
|---|---|---|---|
|
#18+
Sergey11222, Чтобы строка с фамилией Сидоров осталась без изменений. Как это сделать?-сохранить автофильтр; -отменить автофильтр; -загрузить данные из набора записей; -восстановить автофильтр. Код: plaintext 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. 39. 40. Код: plaintext 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. 39. 40. 41. 42. 43. 44. 45. 46. Перед выгрузкой даных из набора записей на лист, неплохо было бы очищать диапазон, в который выгружаются данные. Иначе рискуете получить "фантомные" записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2011, 01:24 |
|
||
|
Передача данных на лист Excel из recordset
|
|||
|---|---|---|---|
|
#18+
Всем ответившим спасибо. AndreTM , Список фамилий получаем из источника, затем обрабатываем его (записи) с помощью стандартных инструментов Excel. Guest, зря Вы про скукотищу. 1.Схема обновления и включения/выключения фильтров осталась старой, но с "изюминкой". Для меня Ваше решение очень интересно. Была у меня еще ошибка: при обновлении не все записи копировались. В Вашем варианте этой ошибки нет. 2. От очистки диапазона пришлось отказаться, т.к. нужно оставить форматирование. При Clear очищается форматирование , а при Delete удаляются ячейки. С "фантомами" что делать, пока не знаю. Позволю себе еще раз вернуться к вопросу ТС. При включенном фильтре и отфильтрованных записях есть ли вариант применения "чисто" rs, т.е. загрузить данные без использования сохранить/отменить/восстановить автофильтр? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2011, 22:34 |
|
||
|
Передача данных на лист Excel из recordset
|
|||
|---|---|---|---|
|
#18+
Sergey11222, 2. От очистки диапазона пришлось отказаться, т.к. нужно оставить форматирование. При Clear ... .ClearContents сохраняет форматирование Была у меня еще ошибка: при обновлении не все записи копировалисьПравильнее было бы сказать "не копировалась первая запись". Виной тому .MoveNext . Простой наглядный пример Исходные данные (должны жить на листе 'Лист1' в книге D:\Книга3.xls) Исполнитель1.Иванов2.Петров3.Сидоров4.Иванов5.Петров немного измененный Ваш код Код: plaintext 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. При включенном фильтре и отфильтрованных записях есть ли вариант применения "чисто" rs, ...По всей видимости, нет. Но ещё остается вариант .Copy .PasteSpecial ОФФ"скукотища" - это не отношение к Вашему вопросу, а состояние души. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2011, 23:46 |
|
||
|
Передача данных на лист Excel из recordset
|
|||
|---|---|---|---|
|
#18+
Guest, за .ClearContents - большое спасибо. А мне интересно было бы сделать такой вариант: хранение данных в .mdb, а вызов, изменение данных и передача их обратно в БД - средствами Excel. Было бы здорово. Но не все операции пока понятны. Получение данных из Access в Excel, - пример нашел, их изменение, добавление представляю пока в общих чертах, сохранение обратно в БД - литературы пока не нашел. А rs - рассматриваю как средство. Еще раз спасибо за то, что "объяснили на пальцах", что к чему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2011, 20:05 |
|
||
|
Передача данных на лист Excel из recordset
|
|||
|---|---|---|---|
|
#18+
ЗЫ, точнее PS: вот так копируются все записи из rs, до тех пор, пока значение позиции rs не равно True Код: plaintext 1. 2. 3. 4. 5. Или так Код: plaintext 1. 2. 3. 4. 5. вариант .Copy .PasteSpecial Это объектная модель или из средств доступа к данным ADO/DAO? Поправьте меня, если высказался не правильно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2011, 20:54 |
|
||
|
Передача данных на лист Excel из recordset
|
|||
|---|---|---|---|
|
#18+
Sergey11222А мне интересно было бы сделать такой вариант: хранение данных в .mdb, а вызов, изменение данных и передача их обратно в БД - средствами Excel. Было бы здорово. Но не все операции пока понятныДелается-то легко. Но непонятен сам смысл. С одной стороны, зачем вам Excel для управления данными, если Access и так содержит всё необходимое? Или, исходя из того, что вы "типа знаете Зкэель и его макросы?" С другой стороны, если построить модель данных изначально "типа правильно", то можно сразу подходить с точки зрения построения клиент-серверной системы, на РДБ. Не в плане того, что Access будет изображать из себя полнофункционального "старшего брата", а в том плане, что и Excel может быть "клиентом", но надо сразу чётко разделить - "вот это - данные, вот это - то, что работает с данными", и не сваливать всё в кучу. Еще проще - вы бы поподробнее рассказали о предметной области... возможно, есть решение проще (например, вместо Access в качестве хранилища сразу можно использовать MS SQL Express..., вместо Офиса в качестве клиента - сразу приложение на VB/VB.NET). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2011, 21:26 |
|
||
|
Передача данных на лист Excel из recordset
|
|||
|---|---|---|---|
|
#18+
Sergey11222,вариант .Copy .PasteSpecial Это объектная модель или из средств доступа к данным ADO/DAO?Объектная модель. В текущем контексте - методы объекта Range. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2011, 21:56 |
|
||
|
Передача данных на лист Excel из recordset
|
|||
|---|---|---|---|
|
#18+
скукотищаSergey11222,вариант .Copy .PasteSpecial Это объектная модель или из средств доступа к данным ADO/DAO?Объектная модель. В текущем контексте - методы объекта Range. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2011, 16:28 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=37473204&tid=2176414]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 462ms |

| 0 / 0 |
