|
|
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Добрый день! Я первый столкнулась с VBA. Не могли бы вы помочь? Мне нужно сделать отчет в Excel. Я там создала макрос, прописала соединение с Oracle. У меня есть вот такой запрос select pl.def, count(t.chrg_id), sum(t.amount_$) from charges t, price_list pl where t.prcl_prcl_id=pl.prcl_id and t.prcl_prcl_id in (10109,10112,10114,10116,10118) and t.del_user is null and t.navi_date like '07.01.10' group by pl.def Я могу создать Recordset и просто вытащить данные по этому запросу в Excel. Но мне нужно, чтобы тут работал цикл, где сначала будет браться один prcl_prcl_id=10109. Данные по нему вытаскиваются. Потом следующий и т. д.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2010, 15:36 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
hum_iЯ могу создать Recordset и просто вытащить данные по этому запросу в Excel. Но мне нужно, чтобы тут работал цикл, где сначала будет браться один prcl_prcl_id=10109. Данные по нему вытаскиваются. Потом следующий и т. д..Откуда "данные вытаскиваются"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2010, 17:50 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
hum_iЯ первый столкнулась с VBA. Вы точно не первая, кто столкнулся с VBA По существу вопроса: Запрос у Вас оформлен в виде строки, правильно? Тогда просто каждый раз, при его использовании, просто меняйте какую-либо его часть, в вашем случае, если я правильно понял, будет так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вместо IN как Вы понимаете также можно использовать =, при этом убрать ненужные скобки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2010, 21:00 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Спасибо большое, с этим понятно. Мне вот еще что нужно вместо даты and t.navi_date like '07.01.10' использовать параметр, т.е. при открытии Excel запрашивался временной диапазон. Нужно сделать форму, а в коде как прописать не подскажите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2010, 08:55 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Именно форму надо? Можно просто в начале Вашего макроса Код: plaintext 1. 2. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2010, 09:21 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Мне тоже кажется лучше сделать как предлагает Hugo121 , тоесть использовать форму Inputbox. Если форма должна появлятся при каждом отркрытии книги, вешаете код Hugo121 на событие открытия книги (не в модуле, а в ЭтаКнига): Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2010, 11:41 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Только dt надо Public сделать в таком случае. Я думал инпутбокс в начало имеющегося кода вставить. Ну а на открытие книги весь тот код, или команду запуска того кода из модуля (я так предпочитаю делать). В любом случае как-то ведь тот код запускать будут... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2010, 12:14 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Я не совсем поняла. Я вот сделала Код: plaintext 1. 2. Потом вы пишите авторЯ думал инпутбокс в начало имеющегося кода вставить. Ну а на открытие книги весь тот код, или команду запуска того кода из модуля (я так предпочитаю делать). Не подскажите где именно инпутбокс в имеющемся коде вставить? Вот кусочек кода: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 09:31 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Не совсем понятно, зачем при открытии файла запрашивать дату, если далее ничего не следует? Я думаю, дату надо запрашивать перед её использованием (при открытии запускаем макрос (если конечно надо сразу его запускать), а в нём запрашиваем дату) Код: 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. Примерно так. Только объявление переменных не отслеживал, может надо Dim dt$ в Pri_Call, если она ранее Public не объявлена. И ещё - Cells(1, 2).Value = dt вставит строку в ячейку, а эксель её наверняка преобразует в дату (если формат ячейки Общий, вроде так, не проверяю). Я бы это на самотёк не пускал - надо в коде задать нужный формат этой ячейке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 09:50 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Я указала формат dt = Format(Date, "DD.MM.YY") Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. А при запуске все равно дает ошибку Type mismatch в этой части Sql = Sql & " and t.navi_date like '" + dt + "'" Помогите пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 12:36 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
InputBox выдаёт строку, потом уже надо этой переменной менять тип. Но в Вашем случае ведь строку и надо подставлять в запрос? Вроде так в начале затевалась вся эта бодяга... А преобразовывать в дату тогда есть смысл перед вставкой в ячейку. Может так: Код: plaintext 1. 2. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 12:56 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Хотя нет, datS всё равно строка, поторопился, не проверил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 13:00 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Увы ну опять та же ошибка ((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 13:23 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Это отключили? Код: plaintext 1. 2. И вот это я бы написал всё же так: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 13:29 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Вот так проверяю: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 13:33 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
учитывая авторпрописала соединение с Oracle в ORACLE для дат, по крайней мере я, использую ф-цию БД to_date т.е в Вашем случае должно получится, что-то вроде этого Код: plaintext вопрос: а почему а Вас дата сравнивается по LIKE ? Это все-таки поле типа дата или текстовое? I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 13:34 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
автор HandKot вопрос: а почему а Вас дата сравнивается по LIKE? Это все-таки поле типа дата или текстовое? Не ну можно конечно и ='дата', а можно и like 'дата'. Это не принципиально и то и то работает. Еще у меня такой вопрос. Вот я указала, чтобы данные не в строчку выводились а в столбец Код: plaintext 1. 2. 3. 4. Но они все равно в строчку выводятся, почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2010, 14:13 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Ни кто ни может помочь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 07:10 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
не понятно, что означает чтобы данные не в строчку выводились а в столбец метод CopyFromRecordset выводит рекордсет с указанного адреса и при выводе каждая строка рекордсета будет в новой строке на листе, а каждый столбец рекордсета в столбце листа I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 09:13 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
автор HandKot метод CopyFromRecordset выводит рекордсет с указанного адреса и при выводе каждая строка рекордсета будет в новой строке на листе, а каждый столбец рекордсета в столбце листа Ну так и получается Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 09:50 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
Может я не совсем понятно объяснила. в моем запросе 2 поля: кол-во и сумма. и при выгрузке значения этих полей записываются в строчку Cells(3,2) Cells(3,3). но мне нужно сделать чтобы эти значения выводились в столбик Cells(3,2) Cells(4,2), как нужно заказчику. конечно можно это сделать 2-мя запросами, но это увеличивает код. можно ли как то это обойти, используя один запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 13:59 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
а сколько записей возвращает рекордсет? если одну, то тогда лучше отказатся от CopyFromRecordset и просто вывести Код: plaintext 1. если же несколько строк, то можно поменять местами столбцы и строки (см. Transparent) если не просто поменять, а одни результат по другим, то тогда, скорее всего, лучше переписать запрос I Have Nine Lives You Have One Only THINK! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 14:18 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
У Вас по тех заданию должно быть происвоение кучу раз одной и той же переменной вместо одного как? Как мне кажется, было бы правильнее один раз... Имеется ввиду: Код: plaintext 1. 2. Код: plaintext 1. 2. 3. Учитывая что у Вас нет в запросе GROUP BY, предположительно тогда всего одна запись в рекордсете. Делайте как предложил HandKot . Если когда-нибудь записей будет много, используйте в запросе UNION ALL: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2010, 22:03 |
|
||
|
Создание цикла
|
|||
|---|---|---|---|
|
#18+
HandKot а сколько записей возвращает рекордсет? Запрос возвращает одну запись. Я попробовала как вы написали Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2010, 09:05 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36405175&tid=2178604]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 520ms |

| 0 / 0 |
