Всем доброго утра! Можно ли по факту изменения диапазона (кол-ва строк) умной таблицы запустить макрос? Попробовал сослаться на ячейку, которая считает кол-во строк: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'запуск макроса при изменении кол-ва строк умной таблицы "Таблица1" If Not Intersect(Target, Range("F1")) Is Nothing Then MsgBox "запуск макроса..." End If End Sub
[/vba] Но он не работает (( Помогите, пожалуйста!
Всем доброго утра! Можно ли по факту изменения диапазона (кол-ва строк) умной таблицы запустить макрос? Попробовал сослаться на ячейку, которая считает кол-во строк: [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'запуск макроса при изменении кол-ва строк умной таблицы "Таблица1" If Not Intersect(Target, Range("F1")) Is Nothing Then MsgBox "запуск макроса..." End If End Sub
[/vba] Но он не работает (( Помогите, пожалуйста!Leprotto
Private Sub Worksheet_Change(ByVal Target As Range) 'запуск макроса при изменении кол-ва строк умной таблицы "Таблица1" If Not Intersect(Target, [Таблица1]) Is Nothing Then Application.EnableEvents = 0 Application.Undo r0_ = [Таблица1].Rows.Count Application.Undo r1_ = [Таблица1].Rows.Count Application.EnableEvents = 1 If r0_ <> r1_ Then MsgBox "запуск макроса..." End If End If End Sub
[/vba]
А так? [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'запуск макроса при изменении кол-ва строк умной таблицы "Таблица1" If Not Intersect(Target, [Таблица1]) Is Nothing Then Application.EnableEvents = 0 Application.Undo r0_ = [Таблица1].Rows.Count Application.Undo r1_ = [Таблица1].Rows.Count Application.EnableEvents = 1 If r0_ <> r1_ Then MsgBox "запуск макроса..." End If End If End Sub
Private Sub Worksheet_Calculate() Application.EnableEvents = 0 Application.Undo strok_new = Range("F1").Value Application.Undo strok_old = Range("F1").Value Application.EnableEvents = 1 If strok_old <> strok_new Then MsgBox "запуск макроса..." End If End Sub
[/vba]
но тогда вопрос как вернуть кол-во строк до отката
Или так [vba]
Код
Private Sub Worksheet_Calculate() Application.EnableEvents = 0 Application.Undo strok_new = Range("F1").Value Application.Undo strok_old = Range("F1").Value Application.EnableEvents = 1 If strok_old <> strok_new Then MsgBox "запуск макроса..." End If End Sub
[/vba]
но тогда вопрос как вернуть кол-во строк до откатаand_evg
[/vba], которые прописываю автонумерацию строк и возникает конфликт с ошибкой "1004" (компонент с указанным именем не найден). Ругается на первую [vba]
Код
Application.Undo
[/vba] Пример приложил
_Boroda_ и and_evg, в примере Ваши коды работают как надо. Заменил [vba]
[/vba], которые прописываю автонумерацию строк и возникает конфликт с ошибкой "1004" (компонент с указанным именем не найден). Ругается на первую [vba]
Правильно. Перенесите вниз включение обработчика событий И похоже, что формула у Вас неверная была. 2 и 3 переписал на 1 и 2 [vba]
Код
'Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) 'запуск макроса при изменении кол-ва строк умной таблицы "Таблица1" If Not Intersect(Target, [Таблица1]) Is Nothing Then Application.EnableEvents = 0 Application.Undo r0_ = [Таблица1].Rows.Count Application.Undo r1_ = [Таблица1].Rows.Count If r0_ <> r1_ Then 'MsgBox "запуск макроса..." Range("Таблица1[№]").ClearContents Range("A3").Resize(r1_, 1).FormulaR1C1 = "=IF(AND(RC[1]<>"""", RC[2]<>""""),MAX(R2C:R[-1]C)+1,"""")" End If Application.EnableEvents = 1 End If End Sub
[/vba]
Правильно. Перенесите вниз включение обработчика событий И похоже, что формула у Вас неверная была. 2 и 3 переписал на 1 и 2 [vba]
Код
'Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) 'запуск макроса при изменении кол-ва строк умной таблицы "Таблица1" If Not Intersect(Target, [Таблица1]) Is Nothing Then Application.EnableEvents = 0 Application.Undo r0_ = [Таблица1].Rows.Count Application.Undo r1_ = [Таблица1].Rows.Count If r0_ <> r1_ Then 'MsgBox "запуск макроса..." Range("Таблица1[№]").ClearContents Range("A3").Resize(r1_, 1).FormulaR1C1 = "=IF(AND(RC[1]<>"""", RC[2]<>""""),MAX(R2C:R[-1]C)+1,"""")" End If Application.EnableEvents = 1 End If End Sub