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

Вход

Регистрация

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

 

= Мир MS Excel/Запуск макроса при изменении кол-во строк умной таблицы - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запуск макроса при изменении кол-во строк умной таблицы (Макросы/Sub)
Запуск макроса при изменении кол-во строк умной таблицы
Leprotto Дата: Пятница, 14.04.2017, 09:19 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 2 ±
Замечаний: 0% ±

Excel 2016
Всем доброго утра!
Можно ли по факту изменения диапазона (кол-ва строк) умной таблицы запустить макрос?
Попробовал сослаться на ячейку, которая считает кол-во строк:
[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]
Но он не работает ((
Помогите, пожалуйста!
К сообщению приложен файл: change_range.xlsm (14.2 Kb)
 
Ответить
СообщениеВсем доброго утра!
Можно ли по факту изменения диапазона (кол-ва строк) умной таблицы запустить макрос?
Попробовал сослаться на ячейку, которая считает кол-во строк:
[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
Дата добавления - 14.04.2017 в 09:19
and_evg Дата: Пятница, 14.04.2017, 09:25 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 452
Репутация: 78 ±
Замечаний: 0% ±

Excel 2007
Leprotto,
Замените
[vba]
Код
If Not Intersect(Target, Range("F1")) Is Nothing Then
[/vba]
на
[vba]
Код
If Not Intersect(Target, Range("Таблица1")) Is Nothing Then
[/vba]
 
Ответить
СообщениеLeprotto,
Замените
[vba]
Код
If Not Intersect(Target, Range("F1")) Is Nothing Then
[/vba]
на
[vba]
Код
If Not Intersect(Target, Range("Таблица1")) Is Nothing Then
[/vba]

Автор - and_evg
Дата добавления - 14.04.2017 в 09:25
Leprotto Дата: Пятница, 14.04.2017, 09:27 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 2 ±
Замечаний: 0% ±

Excel 2016
and_evg, СПАСИБО!
 
Ответить
Сообщениеand_evg, СПАСИБО!

Автор - Leprotto
Дата добавления - 14.04.2017 в 09:27
Leprotto Дата: Пятница, 14.04.2017, 09:36 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 2 ±
Замечаний: 0% ±

Excel 2016
Замените
[vba]
Код
If Not Intersect(Target, Range("F1")) Is Nothing Then
[/vba]
на
[vba]
Код
If Not Intersect(Target, Range("Таблица1")) Is Nothing Then
[/vba]

Оказалось, что не подходит, т.к. макрос запускается при любом изменении в Таблице,
а нужно только при изменении кол-ва строк...


Сообщение отредактировал Leprotto - Пятница, 14.04.2017, 09:37
 
Ответить
Сообщение
Замените
[vba]
Код
If Not Intersect(Target, Range("F1")) Is Nothing Then
[/vba]
на
[vba]
Код
If Not Intersect(Target, Range("Таблица1")) Is Nothing Then
[/vba]

Оказалось, что не подходит, т.к. макрос запускается при любом изменении в Таблице,
а нужно только при изменении кол-ва строк...

Автор - Leprotto
Дата добавления - 14.04.2017 в 09:36
_Boroda_ Дата: Пятница, 14.04.2017, 09:51 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
А так?
[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
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеА так?
[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
[/vba]

Автор - _Boroda_
Дата добавления - 14.04.2017 в 09:51
and_evg Дата: Пятница, 14.04.2017, 10:04 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 452
Репутация: 78 ±
Замечаний: 0% ±

Excel 2007
Или так
[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]

но тогда вопрос как вернуть кол-во строк до отката
 
Ответить
СообщениеИли так
[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
Дата добавления - 14.04.2017 в 10:04
Leprotto Дата: Пятница, 14.04.2017, 11:27 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 2 ±
Замечаний: 0% ±

Excel 2016
_Boroda_ и and_evg, в примере Ваши коды работают как надо.
Заменил [vba]
Код
MsgBox "запуск макроса..."
[/vba] на команды:
[vba]
Код
Range("Таблица1[№]").ClearContents
  Range("A3").FormulaR1C1 = "=IF(AND(RC[2]<>"""", RC[3]<>""""),MAX(R2C:R[-1]C)+1,"""")"
[/vba],
которые прописываю автонумерацию строк
и возникает конфликт с ошибкой "1004" (компонент с указанным именем не найден).
Ругается на первую [vba]
Код
Application.Undo
[/vba]
Пример приложил
К сообщению приложен файл: 9712551.xlsm (15.8 Kb)
 
Ответить
Сообщение_Boroda_ и and_evg, в примере Ваши коды работают как надо.
Заменил [vba]
Код
MsgBox "запуск макроса..."
[/vba] на команды:
[vba]
Код
Range("Таблица1[№]").ClearContents
  Range("A3").FormulaR1C1 = "=IF(AND(RC[2]<>"""", RC[3]<>""""),MAX(R2C:R[-1]C)+1,"""")"
[/vba],
которые прописываю автонумерацию строк
и возникает конфликт с ошибкой "1004" (компонент с указанным именем не найден).
Ругается на первую [vba]
Код
Application.Undo
[/vba]
Пример приложил

Автор - Leprotto
Дата добавления - 14.04.2017 в 11:27
_Boroda_ Дата: Пятница, 14.04.2017, 11:38 | Сообщение № 8
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Правильно. Перенесите вниз включение обработчика событий
И похоже, что формула у Вас неверная была. 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]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПравильно. Перенесите вниз включение обработчика событий
И похоже, что формула у Вас неверная была. 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]

Автор - _Boroda_
Дата добавления - 14.04.2017 в 11:38
Leprotto Дата: Пятница, 14.04.2017, 14:40 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 145
Репутация: 2 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, Спасибо!
 
Ответить
Сообщение_Boroda_, Спасибо!

Автор - Leprotto
Дата добавления - 14.04.2017 в 14:40
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Запуск макроса при изменении кол-во строк умной таблицы (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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