|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
Формирую excel-файл из oracle. Процесс выглядит примерно так: 1. Создается новый excel-файл на основе xlt шаблона 2. Выводятся данные в файл При этом в шаблоне есть макрос, рисующий Chart на одном из листов, на основе данных с другого листа. Проблема в том, что макрос использует данные из одной ячейки (хранится количество колонок для Chart'а). Поэтому если прописать макрос в ThisBook, то переменная, которая заполняется из ячейки, будет еще пустая. Можно ли как-то (макросом или еще чем-нибудь) запускать макрос для формирования Chart'а после заполнения ячейки (например, если Value ячейки будет больше 0)? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2012, 14:04 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
WorkSheet_Change. Проверяй нужную ячейку, если есть значение - вызывай процедуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2012, 15:40 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
Что-то такое получилось...не работает..подскажите в чем ошибка? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Модератор: Учимся использовать тэги оформления кода - FAQ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 10:35 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
Неизвестно, вы же ни файла не приложили ни описания ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 10:42 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
файл приложить не могу, к сожалению, могу описать. Есть два листа: на первый выводятся данные, на втором макросом строятся чарты. На первом листе в ячейку (1, 1) выводится количество столбцов, по которым потом строятся эти чарты. Так вот идея какая: при изменении на первом листе, я проверяю сначала есть ли значение в ячейке (1, 1), затем смотрю есть ли значение в последней ячейке (48, 3+x) и если есть, то вызываю функцию построения чартов. Вот так сделал. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Модератор: Учимся использовать тэги оформления кода - FAQ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 10:56 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
проблема в том, что как мне кажется с этот блок мы не попадаем. ставил туда MsgBox, и он не появлялся ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 10:58 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
Поставьте брейкпойнт и оттрассируйте код. PS. Устанавливать Application.EnableEvents до проверок - некошерно. Select листа без запоминания, где были, и невосстановление - и вовсе моветон. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 11:18 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
AkinaПоставьте брейкпойнт и оттрассируйте код. PS. Устанавливать Application.EnableEvents до проверок - некошерно. Select листа без запоминания, где были, и невосстановление - и вовсе моветон. А можно то же самое только для тех кто в танке? с vba первый раз плотно столкнулся, поэтому черпаю информацию на просторах интернета, где-то нагуглил, что нужно так ставить, чтобы не было зацикливания - типа проверяем лист на изменение, вносим изменение и снова попадаем в проверку на изменение Еще вопрос WorkSheet_Change применяется к текущему листу? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 11:33 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
тыкаешь мышиным курсором слева от строки Sheets("Number of Transaction").Select появляется точечка коричневая и строка выделается дальше при выполнении кода, на этой строке произойдет остановка. Далее по F8 пошагово можно выполнять код и смотреть, как он идет, параллельно внизу в окне Immediate (или в окне watch, которое нужно открыть принудительно) можно проверять значения переменных. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 11:41 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
Shocker.Proтыкаешь мышиным курсором слева от строки Sheets("Number of Transaction").Select появляется точечка коричневая и строка выделается дальше при выполнении кода, на этой строке произойдет остановка. Далее по F8 пошагово можно выполнять код и смотреть, как он идет, параллельно внизу в окне Immediate (или в окне watch, которое нужно открыть принудительно) можно проверять значения переменных. Спс. Это я уже понял. Тут как и в любой другой среде. Я не совсем понял про Application.EnableEvents.... Если мы попадаем в обработку события Изменения на листе, и далее вносим в этот лист Изменение и как я понимаю снова попадаем в обработчик события ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 11:56 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
Я сделал еще один вариант как можно вызывать формирование чартов после заполнения данных [src vb] Private Sub Workbook_Open() Application.OnTime Now + TimeValue("00:00:05"), "ThisWorkbook.DrawChart1" End Sub [/src vb] но столкнулся с другой проблемой, когда формируется файл, вываливается ошибка 400. как я понял ошибка возникает во множестве ситуаций...я прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 12:03 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
Разобрался! Всем спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 13:40 |
|
автозапуск макроса после заполнения листа
|
|||
---|---|---|---|
#18+
danzkiЕсли мы попадаем в обработку события Изменения на листе, и далее вносим в этот лист Изменение и как я понимаю снова попадаем в обработчик событияДля предотвращения подобных вещей используют статические переменные-флаги. Код: vbnet 1. 2. 3. 4. 5. 6. 7.
А Application.EnableEvents = False отрубает ВСЕ события. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2012, 15:04 |
|
|
start [/forum/topic.php?fid=60&msg=37947928&tid=2157462]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 305ms |
total: | 431ms |
0 / 0 |