Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Worksheet_activate и copypaste на других листах зацикливаетс - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Worksheet_activate и copypaste на других листах зацикливаетс (Макросы/Sub)
Worksheet_activate и copypaste на других листах зацикливаетс
Sancho Дата: Четверг, 07.09.2017, 12:30 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
Всем добрый день!

написав в модуле листа (Таблица 1) код [vba]
Код

Sub Worksheet_activate()
If ff2.Range("AH5").Value = 0 Then Exit Sub

ff2.Range("AG6:AI105").Copy
FF6.Range("A1").PasteSpecial Paste:=xlPasteValues

End Sub
[/vba]
получил зацикливание выполнения этого кода. так то мне логически понятно, что код прыгает с листа на лист и он при возвращении на лист Таблица1 запускается снова. Как исправить?
причем если оставить какую либо одну строку, либо с copy, либо с paste, то все нормально. Ничего не понимаю

со вложением осторожно! возможно падение excel !!!
К сообщению приложен файл: 6358806.xlsm (63.2 Kb)
 
Ответить
СообщениеВсем добрый день!

написав в модуле листа (Таблица 1) код [vba]
Код

Sub Worksheet_activate()
If ff2.Range("AH5").Value = 0 Then Exit Sub

ff2.Range("AG6:AI105").Copy
FF6.Range("A1").PasteSpecial Paste:=xlPasteValues

End Sub
[/vba]
получил зацикливание выполнения этого кода. так то мне логически понятно, что код прыгает с листа на лист и он при возвращении на лист Таблица1 запускается снова. Как исправить?
причем если оставить какую либо одну строку, либо с copy, либо с paste, то все нормально. Ничего не понимаю

со вложением осторожно! возможно падение excel !!!

Автор - Sancho
Дата добавления - 07.09.2017 в 12:30
KuklP Дата: Четверг, 07.09.2017, 12:46 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Отключайте события перед копипастом. Потом верните назад.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеОтключайте события перед копипастом. Потом верните назад.

Автор - KuklP
Дата добавления - 07.09.2017 в 12:46
Sancho Дата: Четверг, 07.09.2017, 12:52 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
KuklP, спасибо!
Да уж, догадайся тут, что необходимо отключение событий. заработало!
 
Ответить
СообщениеKuklP, спасибо!
Да уж, догадайся тут, что необходимо отключение событий. заработало!

Автор - Sancho
Дата добавления - 07.09.2017 в 12:52
SLAVICK Дата: Четверг, 07.09.2017, 13:05 | Сообщение № 4
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Отключайте события перед копипастом

Можно и не отключать - а сделать глобальную переменную(ведь не всегда нужно события отключать).
Макрос запустился флаг взвелся. Потом при повторном запуске макроса - снялся. Как-то так:
[vba]
Код
Sub Worksheet_activate()
If Flag Then
    Flag = 0
    Exit Sub
Else
    Flag = 1
    If ff2.Range("AH5").Value = 0 Then Exit Sub
    ff2.Range("AG6:AI105").Copy
    FF6.Range("A1").PasteSpecial Paste:=xlPasteValues
End If
End Sub
[/vba]
К сообщению приложен файл: 6691576.xlsm (59.5 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Отключайте события перед копипастом

Можно и не отключать - а сделать глобальную переменную(ведь не всегда нужно события отключать).
Макрос запустился флаг взвелся. Потом при повторном запуске макроса - снялся. Как-то так:
[vba]
Код
Sub Worksheet_activate()
If Flag Then
    Flag = 0
    Exit Sub
Else
    Flag = 1
    If ff2.Range("AH5").Value = 0 Then Exit Sub
    ff2.Range("AG6:AI105").Copy
    FF6.Range("A1").PasteSpecial Paste:=xlPasteValues
End If
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 07.09.2017 в 13:05
Sancho Дата: Вторник, 12.09.2017, 07:50 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
SLAVICK, Спасибо! Извиняюсь, что не отблагодарил сразу!
 
Ответить
СообщениеSLAVICK, Спасибо! Извиняюсь, что не отблагодарил сразу!

Автор - Sancho
Дата добавления - 12.09.2017 в 07:50
KuklP Дата: Вторник, 12.09.2017, 09:53 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Не знаю, чем простое отключение событий хуже доп.вычислений, с глобальной переменной и при этом событийная процедура все равно вызывается два раза. Но раз уж без отключения, то технологичней и экономней будет так:
[vba]
Код
Sub Worksheet_activate()
    If ff2.Range("AH5").Value = 0 Then Exit Sub
    FF6.Range("A1:c99").Value = ff2.Range("AG6:AI105").Value
End Sub
[/vba]


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеНе знаю, чем простое отключение событий хуже доп.вычислений, с глобальной переменной и при этом событийная процедура все равно вызывается два раза. Но раз уж без отключения, то технологичней и экономней будет так:
[vba]
Код
Sub Worksheet_activate()
    If ff2.Range("AH5").Value = 0 Then Exit Sub
    FF6.Range("A1:c99").Value = ff2.Range("AG6:AI105").Value
End Sub
[/vba]

Автор - KuklP
Дата добавления - 12.09.2017 в 09:53
Sancho Дата: Вторник, 12.09.2017, 10:08 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 279
Репутация: 19 ±
Замечаний: 0% ±

2007, 2010, 2013
KuklP, Спасибо, интересное решение, тем более что не знал что один диапазон можно приравнять к другому таким образом, все по старинке копировал и вставлял
 
Ответить
СообщениеKuklP, Спасибо, интересное решение, тем более что не знал что один диапазон можно приравнять к другому таким образом, все по старинке копировал и вставлял

Автор - Sancho
Дата добавления - 12.09.2017 в 10:08
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Worksheet_activate и copypaste на других листах зацикливаетс (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!