[/vba] получил зацикливание выполнения этого кода. так то мне логически понятно, что код прыгает с листа на лист и он при возвращении на лист Таблица1 запускается снова. Как исправить? причем если оставить какую либо одну строку, либо с copy, либо с paste, то все нормально. Ничего не понимаю
со вложением осторожно! возможно падение excel !!!
Всем добрый день!
написав в модуле листа (Таблица 1) код [vba]
Код
Sub Worksheet_activate() If ff2.Range("AH5").Value = 0 Then Exit Sub
[/vba] получил зацикливание выполнения этого кода. так то мне логически понятно, что код прыгает с листа на лист и он при возвращении на лист Таблица1 запускается снова. Как исправить? причем если оставить какую либо одну строку, либо с copy, либо с paste, то все нормально. Ничего не понимаю
со вложением осторожно! возможно падение excel !!!Sancho
Можно и не отключать - а сделать глобальную переменную(ведь не всегда нужно события отключать). Макрос запустился флаг взвелся. Потом при повторном запуске макроса - снялся. Как-то так: [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]
Код
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]
Код
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]
Не знаю, чем простое отключение событий хуже доп.вычислений, с глобальной переменной и при этом событийная процедура все равно вызывается два раза. Но раз уж без отключения, то технологичней и экономней будет так: [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
KuklP, Спасибо, интересное решение, тем более что не знал что один диапазон можно приравнять к другому таким образом, все по старинке копировал и вставлял
KuklP, Спасибо, интересное решение, тем более что не знал что один диапазон можно приравнять к другому таким образом, все по старинке копировал и вставлялSancho