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

Вход

Регистрация

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

 

= Мир MS Excel/Как определить, что была вставлена строка? (или несколько) - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как определить, что была вставлена строка? (или несколько) (Макросы/Sub)
Как определить, что была вставлена строка? (или несколько)
Michael_S Дата: Вторник, 12.04.2016, 14:49 | Сообщение № 1
Группа: Друзья
Ранг: Старожил
Сообщений: 1687
Репутация: 327 ±
Замечаний: 0% ±

Excel2016
Всем привет!
По сути весь вопрос в заголовке.
Worksheet_Change отслеживает событие вставки, но как определить, что была именно вставка строки, а не какое нибудь другое Change?
Чет у меня ни каких идей :( а надо...


ЯД: 41001136675053
WM: R389613894253
 
Ответить
СообщениеВсем привет!
По сути весь вопрос в заголовке.
Worksheet_Change отслеживает событие вставки, но как определить, что была именно вставка строки, а не какое нибудь другое Change?
Чет у меня ни каких идей :( а надо...

Автор - Michael_S
Дата добавления - 12.04.2016 в 14:49
RAN Дата: Вторник, 12.04.2016, 15:08 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4277
Репутация: 829 ±
Замечаний: 0% ±

2010
[vba]
Код
Option Explicit

Dim n&

Private Sub Worksheet_Activate()
    n = Me.UsedRange.Rows.Count
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Me.UsedRange.Rows.Count <> n Then MsgBox "Мяу!"
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    n = Me.UsedRange.Rows.Count
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Option Explicit

Dim n&

Private Sub Worksheet_Activate()
    n = Me.UsedRange.Rows.Count
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    If Me.UsedRange.Rows.Count <> n Then MsgBox "Мяу!"
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    n = Me.UsedRange.Rows.Count
End Sub
[/vba]

Автор - RAN
Дата добавления - 12.04.2016 в 15:08
Michael_S Дата: Вторник, 12.04.2016, 15:17 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1687
Репутация: 327 ±
Замечаний: 0% ±

Excel2016
RAN, спасибо, тоже вариант.
Почему "тоже" - пришла такая идея:
[vba]
Код
If Target.Address Like "*[!A-Z]*" Then MsgBox "Вставлена строка"
[/vba]


ЯД: 41001136675053
WM: R389613894253
 
Ответить
СообщениеRAN, спасибо, тоже вариант.
Почему "тоже" - пришла такая идея:
[vba]
Код
If Target.Address Like "*[!A-Z]*" Then MsgBox "Вставлена строка"
[/vba]

Автор - Michael_S
Дата добавления - 12.04.2016 в 15:17
RAN Дата: Вторник, 12.04.2016, 15:29 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4277
Репутация: 829 ±
Замечаний: 0% ±

2010
Тогда уж так
[vba]
Код
If Not Target.Address Like "*[A-Z]*" Then MsgBox "Вставлена строка"
[/vba]
Но попробуй строку очистить.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеТогда уж так
[vba]
Код
If Not Target.Address Like "*[A-Z]*" Then MsgBox "Вставлена строка"
[/vba]
Но попробуй строку очистить.

Автор - RAN
Дата добавления - 12.04.2016 в 15:29
_Boroda_ Дата: Вторник, 12.04.2016, 15:32 | Сообщение № 5
Группа: Модераторы
Ранг: Экселист
Сообщений: 9354
Репутация: 3924 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
RAN, Андрей, так реагирует еще и на просто вставку значения ниже ЮзедРенжа. И не реагирует на вставку строки ниже него (правда, смысла на него реагировать я не вижу). Это я про первый твой код.

Michael_S, Михаил, предлагаю сравнивать кол-во ячеек Тэджета и кол-ва ячеек в одной строке. Тоже может быть совпадение, но довольно маловероятно.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    n_ = Target.Cells.Count
    c_ = Columns.Count
    If n_ Mod c_ = 0 Then MsgBox "Вставка строк(и)"
End Sub
[/vba]
К сообщению приложен файл: 829786.xlsm(15Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеRAN, Андрей, так реагирует еще и на просто вставку значения ниже ЮзедРенжа. И не реагирует на вставку строки ниже него (правда, смысла на него реагировать я не вижу). Это я про первый твой код.

Michael_S, Михаил, предлагаю сравнивать кол-во ячеек Тэджета и кол-ва ячеек в одной строке. Тоже может быть совпадение, но довольно маловероятно.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    n_ = Target.Cells.Count
    c_ = Columns.Count
    If n_ Mod c_ = 0 Then MsgBox "Вставка строк(и)"
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 12.04.2016 в 15:32
SLAVICK Дата: Вторник, 12.04.2016, 16:00 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 1836
Репутация: 613 ±
Замечаний: 0% ±

2007,2010,2013,2016
Александр - попробуй просто очистить строку :D
Нужно все-таки привязываться и к к-ву строк.
Попробовал - получилось как-то так:
[vba]
Код
Option Explicit
Dim n&

Private Sub Worksheet_Activate()
Application.EnableEvents = False
     n = Me.Cells(1, 1).SpecialCells(xlLastCell).Row
Application.EnableEvents = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
    If Target.CountLarge Mod Me.Columns.Count = 0 And Me.Cells(1, 1).SpecialCells(xlLastCell).Row > n Then MsgBox "Мяу! + d:)"
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
     n = Me.Cells(1, 1).SpecialCells(xlLastCell).Row
Application.EnableEvents = True
End Sub
[/vba]

Сначала думал тоже к UsedRange привязатся, но если он начинается, к примеру, с 4-й строки а вставка пустой строки происходит до него - то к-во его строк не изменяется.

Добавил:
Если нужно отследить именно вставку пустой строки - поменять процедуру Worksheet_Change на (2-й файл) :
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Application.EnableEvents = False
    Set r = Target.Find("*", , xlValues)
    If Not r Is Nothing Then Application.EnableEvents = True: Exit Sub
    If Target.CountLarge Mod Me.Columns.Count = 0 And Me.Cells(1, 1).SpecialCells(xlLastCell).Row > n Then MsgBox "Мяу! + d:)"
Application.EnableEvents = True
End Sub
[/vba]
К сообщению приложен файл: 3995903-1-.xlsm(42Kb) · 3004474.xlsm(39Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Вторник, 12.04.2016, 16:21
 
Ответить
СообщениеАлександр - попробуй просто очистить строку :D
Нужно все-таки привязываться и к к-ву строк.
Попробовал - получилось как-то так:
[vba]
Код
Option Explicit
Dim n&

Private Sub Worksheet_Activate()
Application.EnableEvents = False
     n = Me.Cells(1, 1).SpecialCells(xlLastCell).Row
Application.EnableEvents = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
    If Target.CountLarge Mod Me.Columns.Count = 0 And Me.Cells(1, 1).SpecialCells(xlLastCell).Row > n Then MsgBox "Мяу! + d:)"
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
     n = Me.Cells(1, 1).SpecialCells(xlLastCell).Row
Application.EnableEvents = True
End Sub
[/vba]

Сначала думал тоже к UsedRange привязатся, но если он начинается, к примеру, с 4-й строки а вставка пустой строки происходит до него - то к-во его строк не изменяется.

Добавил:
Если нужно отследить именно вставку пустой строки - поменять процедуру Worksheet_Change на (2-й файл) :
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
Application.EnableEvents = False
    Set r = Target.Find("*", , xlValues)
    If Not r Is Nothing Then Application.EnableEvents = True: Exit Sub
    If Target.CountLarge Mod Me.Columns.Count = 0 And Me.Cells(1, 1).SpecialCells(xlLastCell).Row > n Then MsgBox "Мяу! + d:)"
Application.EnableEvents = True
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 12.04.2016 в 16:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Как определить, что была вставлена строка? (или несколько) (Макросы/Sub)
Страница 1 из 11
Поиск:

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