![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 01.04.2009
Сообщений: 4
|
![]()
У меня целый день работает макрос в одной книге - собирает статистику из биржевого терминала. Я не могу одновременно работать в другом файле. Когда я нахожусь в другом файле, в момент очередного обновления данных и исполнения макроса, вылетает ошибка - либо Error9, либо Error1004.
А нужно, чтобы макрос крутился непрерывно параллельно с другой работой. Макрос запускается с помощью обработки события Private Sub Worksheet_Calculate(). Макрос копирует статистику на соседний лист. В прикрепленных файлах пример. Макрос находится в Книге1. Открываем обе книги и переходим в книгу 2. Имитируем ситуацию. В книге 2 меням значение в ячейке А1 и в Книге 1 запускается макрос. Но ![]() Private Sub Worksheet_Calculate() Workbooks("Книга1").Worksheets("Л1" ).Range("E1:E2").Select Selection.Copy Range("E3:E4").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub Чем можете , подскажите плиз, а то получается, что если работает макрос, то больше ничего на компе делать нельзя. спс Последний раз редактировалось Ples; 01.04.2009 в 22:35. |
![]() |
![]() |
![]() |
#2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Замените свой макрос на этот код:
Код:
Код:
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 01.04.2009
Сообщений: 4
|
![]()
Спасибо. Проверил. На Книгах из примера работает, не виснет.
Но не могу продолжить логику. Не пойму как применить "Me." к листам??? Мне нужно, чтобы когда макрос в своей книге переходит с одного листа на другой, а я в это время нахожусь в другой книге, чтобы процесс не зависал. спс Вот эта часть у меня находится на Листе1 Private Sub Worksheet_Calculate() Application.ScreenUpdating = False ГлобальныйМодульМой Application.ScreenUpdating = True End Sub = = = А вот эта в Module1 Sub ГлобальныйМодульМой() Sheets("Текущf").Select !!! ИЛИ здесь зависает ! ! ! If Range("M9") = "1" Then !!! ИЛИ ЗДЕСЬ зависает ! ! Range("E11:E12").Select Selection.Copy Range("F11:F12").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("P6:P11").Select Application.CutCopyMode = False Selection.Copy Sheets("Сигма").Select Range("C6:C11").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False еще раз спс Последний раз редактировалось Ples; 03.04.2009 в 11:08. |
![]() |
![]() |
![]() |
#4 |
Регистрация: 01.04.2009
Сообщений: 4
|
![]()
Уважаемые!
У кого-либо есть опыт работы сразу двух разных макросов. Ну, например, один что-либо долго считает или заполняет 1000 карточек, а в это время в другом файле другой макрос делает совсем другую работу. Ну или пока один макрос что-то считает, мы руками что-либо делаем в другом файле. |
![]() |
![]() |
![]() |
#5 | |||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Если макрос написан корректно, он нисколько не мешает работе в другом файле. Чтобы всё работало, надо: 1) убрать все Select и Activate из кода. (они там абсолютно не нужны) 2) придётся отказаться от Application.ScreenUpdating = False 3) Обязательно использовать оператор Doevents - чтобы макрос время от времени передавал управление операционной системе (которая должна обработать ваши действия типа нажатия кнопок) А Ваш макрос можно значительно упростить: (если при этом не переключаться на другую книгу) Код:
Цитата:
Цитата:
Код:
Или так в любом другом модуле: (в таком виде макрос не помешает вам работать с другими книгами) Код:
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 06.04.2009 в 13:49. |
|||
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 30.01.2008
Сообщений: 314
|
![]()
чтобы не мешало работать, макрос должен быть "быстрым"
или, как сказано выше, разделить его на части операторами doevents а копирование данных быстрее всего чисто vbaшными методами: range()=range().value |
![]() |
![]() |
![]() |
#7 |
Регистрация: 01.04.2009
Сообщений: 4
|
![]()
Спасибо. Вроде получилось. Теперь позволяет работать в других книгах Еxcel.
Но 1. Вылетаетп о ошибке при запуске Outlook. Это и раньше было. 2. Не получилось разместить макрос в модуле "Этакнига". т.к. генерируемое на листе "Текущий" событие не видит "ГлобальнымодульМой", если он лежит в "Этойкниге" Использовал вот эту идею. Sub ГлобальныйМодульМой() With Workbooks("ИмяМоейКниги.xls").Works heets("Текущий") If .[M9] = 1 Then .[E11:E12].Copy .[F11:F12] .[P6:P11].Copy Workbooks("ИмяМоейКниги.xls").Works heets("Сигма").[C6:C11] End If End With End Sub Может еще что не понял? 2. ???????????????? Скажите, плиз, "DoEvents", как я понял открывает временные окна для операционки. А вот эта штука "Application.EnableEvents = True" снимает запрет реагировать на События. Так как они пишутся очень похоже, скажите, а "DoEvents" - это случайно не "конец всех ограничений"? Может он тоже разрешает события? |
![]() |
![]() |
![]() |
#8 | ||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Те файлы, которые прикреплены к посту #1, не должны вызывать появление сообщения об ошибке. Скорее всего, какой-то из ваших макросов пытается работать с почтой. Не увидев кода этого макроса, посоветовать что-либо затруднительно. Цитата:
Цитата:
Точнее, этот оператор временно передаёт управление операционной системе, чтобы та успела сделать свои дела (обработать нажатия клавиш и т.д. и т.п.) Цитата:
А вот Application.EnableEvents = True - разрешает. "конец всех ограничений" присутствует только лишь в виде дорожных знаков. Разработчики excel до этого ещё не додумались. |
||||
![]() |
![]() |
![]() |
#9 | |
Новичок
Джуниор
Регистрация: 17.12.2016
Сообщений: 1
|
![]() Цитата:
Решал тут свою задачу, столкнулся с подобной проблемой. Здесь вставляются заодно и формулы Код:
Код:
Последний раз редактировалось Toxanter; 17.12.2016 в 18:52. |
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как заставить работать макрос при защите листа | qwertyuzer | Microsoft Office Excel | 4 | 11.02.2009 15:20 |
Не работает макрос при обновлении ячеек в реальном времени из другой книги | Maxx | Microsoft Office Excel | 3 | 12.01.2009 11:42 |
Как запустить макрос при изменении другой книги Excel? | Град | Microsoft Office Excel | 12 | 10.06.2008 10:01 |
как заставить работать макрос при определенном значении ячейки? | Град | Microsoft Office Excel | 5 | 30.05.2008 16:06 |