Private Sub Worksheet_Change(ByVal Target As Range) 'тут не совсем понятно If Target.Cells.Count > 1 Then Exit Sub 'тут совсем не понятно If Not Intersect(Target, Range("A:A")) Is Nothing Then 'тут ясно, что следим за изменениями в столбце А. Хотелось бы подробней With Target(1, 5) 'тут указываем ячейку, куда будут вводиться результат вычисления следующей строки .Value = Now 'если по-русски, то =ТДАТА() Columns("e:e").NumberFormat = "[$-F400]h:mm:ss AM/PM" 'формат ячеек столбца Е - время (ч,мм,сс). Только вот что значит [$-F400]? .EntireColumn.AutoFit 'автовыравнивание End With With Target(1, 6) ' .Value = Now ' Columns("f:f").NumberFormat = "d/m/yyyy" 'формат ячеек столбца F - дата (д,м,ггг) .EntireColumn.AutoFit ' End With End If End Sub
[/vba] Вот что у меня получилось после доработки уже готового макроса строками, полученными в результате использования макрорекордера Для пущей ясности прошу знатоков разъяснить вопросы, которые я указал выше. Спасибо.
Всем привет. [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) 'тут не совсем понятно If Target.Cells.Count > 1 Then Exit Sub 'тут совсем не понятно If Not Intersect(Target, Range("A:A")) Is Nothing Then 'тут ясно, что следим за изменениями в столбце А. Хотелось бы подробней With Target(1, 5) 'тут указываем ячейку, куда будут вводиться результат вычисления следующей строки .Value = Now 'если по-русски, то =ТДАТА() Columns("e:e").NumberFormat = "[$-F400]h:mm:ss AM/PM" 'формат ячеек столбца Е - время (ч,мм,сс). Только вот что значит [$-F400]? .EntireColumn.AutoFit 'автовыравнивание End With With Target(1, 6) ' .Value = Now ' Columns("f:f").NumberFormat = "d/m/yyyy" 'формат ячеек столбца F - дата (д,м,ггг) .EntireColumn.AutoFit ' End With End If End Sub
[/vba] Вот что у меня получилось после доработки уже готового макроса строками, полученными в результате использования макрорекордера Для пущей ясности прошу знатоков разъяснить вопросы, которые я указал выше. Спасибо.light26
Я не волшебник. Я только учусь
Сообщение отредактировал light26 - Пятница, 27.04.2012, 14:43
' это обработчик события изменений на листе, _ Target - это диапазон, который был изменен Private Sub Worksheet_Change(ByVal Target As Range) ' если изменили диапазон, состоящий более чем из одной ячейки, то выходим If Target.Cells.Count > 1 Then Exit Sub
'тут ясно, что следим за изменениями в столбце А. Хотелось бы подробней... '...пересечение Таргета с первым столбцом не есть ничто, _ т.е., есть что-то, т.е., Таргет пересекается с 1-м столбцом If Not Intersect(Target, Range("A:A")) Is Nothing Then '''If Target.Column = 1 Then ' я бы так написал, т.к. Таргет - это одна ячейка, на этой строчке уже точно!
With Target(1, 5) 'тут указываем ячейку, куда будут вводиться результат вычисления следующей строки ' Target(1, 5) - трудноинтерпретируемое выражение, для меня во всяком случае. _ более осмысленно было бы: Target.Offset(0,4) _ или Target.Offset(,4) <-- это тот же х... только сбоку
'строка (***) вызовет этот обработчик еще раз, я думаю, это не планировалось, _ поэтому здесь нужно отключить события Application.EnableEvents = False ' <================== .Value = Now 'если по-русски, то =ТДАТА() (***) Application.EnableEvents = True ' <================== включаем обратно!
Columns("e:e").NumberFormat = "[$-F400]h:mm:ss AM/PM" 'формат ячеек столбца Е - время (ч,мм,сс). Только вот что значит [$-F400]? .EntireColumn.AutoFit 'автовыравнивание (АВТОПОДБОР ШИРИНЫ СТОЛБЦА) End With
With Target(1, 6) Application.EnableEvents = False ' <================== .Value = Now Application.EnableEvents = True ' <================== включаем обратно! Columns("f:f").NumberFormat = "d/m/yyyy" 'формат ячеек столбца F - дата (д,м,ггг) .EntireColumn.AutoFit ' Columns("f:f") в этом контексте идентично .EntireColumn _ при каждом изменении листа каждый раз задавать формат одного и того же столбца _ это неразумно, меняй формат только одной ячейки End With End If End Sub
[/vba]
предложу как вариант [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub
If Target.Column = 1 Then Application.EnableEvents = False With Target With .Offset(, 4) .Value = Time .NumberFormat = "[$-F400]h:mm:ss AM/PM" .EntireColumn.AutoFit End With
With .Offset(, 5) .Value = Date .NumberFormat = "d/m/yyyy" .EntireColumn.AutoFit End With End With Application.EnableEvents = True End If End Sub
[/vba]
вот твой код: [vba]
Code
' это обработчик события изменений на листе, _ Target - это диапазон, который был изменен Private Sub Worksheet_Change(ByVal Target As Range) ' если изменили диапазон, состоящий более чем из одной ячейки, то выходим If Target.Cells.Count > 1 Then Exit Sub
'тут ясно, что следим за изменениями в столбце А. Хотелось бы подробней... '...пересечение Таргета с первым столбцом не есть ничто, _ т.е., есть что-то, т.е., Таргет пересекается с 1-м столбцом If Not Intersect(Target, Range("A:A")) Is Nothing Then '''If Target.Column = 1 Then ' я бы так написал, т.к. Таргет - это одна ячейка, на этой строчке уже точно!
With Target(1, 5) 'тут указываем ячейку, куда будут вводиться результат вычисления следующей строки ' Target(1, 5) - трудноинтерпретируемое выражение, для меня во всяком случае. _ более осмысленно было бы: Target.Offset(0,4) _ или Target.Offset(,4) <-- это тот же х... только сбоку
'строка (***) вызовет этот обработчик еще раз, я думаю, это не планировалось, _ поэтому здесь нужно отключить события Application.EnableEvents = False ' <================== .Value = Now 'если по-русски, то =ТДАТА() (***) Application.EnableEvents = True ' <================== включаем обратно!
Columns("e:e").NumberFormat = "[$-F400]h:mm:ss AM/PM" 'формат ячеек столбца Е - время (ч,мм,сс). Только вот что значит [$-F400]? .EntireColumn.AutoFit 'автовыравнивание (АВТОПОДБОР ШИРИНЫ СТОЛБЦА) End With
With Target(1, 6) Application.EnableEvents = False ' <================== .Value = Now Application.EnableEvents = True ' <================== включаем обратно! Columns("f:f").NumberFormat = "d/m/yyyy" 'формат ячеек столбца F - дата (д,м,ггг) .EntireColumn.AutoFit ' Columns("f:f") в этом контексте идентично .EntireColumn _ при каждом изменении листа каждый раз задавать формат одного и того же столбца _ это неразумно, меняй формат только одной ячейки End With End If End Sub
[/vba]
предложу как вариант [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub
If Target.Column = 1 Then Application.EnableEvents = False With Target With .Offset(, 4) .Value = Time .NumberFormat = "[$-F400]h:mm:ss AM/PM" .EntireColumn.AutoFit End With
With .Offset(, 5) .Value = Date .NumberFormat = "d/m/yyyy" .EntireColumn.AutoFit End With End With Application.EnableEvents = True End If End Sub
Да уж, Вадим, по поводу Target(1, 5) и Target(1, 6) когда Target - одна ячейка, это уж как-то не очень корректно. Правильно сказал Саша, что корректнее использовать Offset Саш, я тут на досуге твой код для Вадима откомментировал. Надеюсь, ты не против? [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) ' обработка события изменения на листе If Target.Cells.Count > 1 Then Exit Sub ' если изменение было больше, чем в одной ячейке - выход ' дальше Target - это одна ячейка If Target.Column = 1 Then ' если Target (изменение на листе) в первом столбце (столбце А) Application.EnableEvents = False ' запретить обработку событий чтобы производимые далее изменения на листе не приводили к повторному циклическому вызову этой же процедуры With Target.Offset(0, 4) ' в ячейке, сдвинутой от ячейки Target на 0 строк и 4 столбца (т.е. с столбце Е) .Value = Time ' значение - текущее время .NumberFormat = "h:mm:ss" ' формат представления чисел в ячейке (время в 24-часовом формате ч:мм:сс) .EntireColumn.AutoFit ' во всём столбце установить выравнивание "Автоподбор ширины" End With
With Target.Offset(0, 5) ' в ячейке, сдвинутой от ячейки Target на 0 строк и 5 столбцов (т.е. с столбце F) .Value = Date ' значение - текущая дата .NumberFormat = "d/m/yyyy" ' формат представления чисел в ячейке (дата Д.М.ГГГГ) .EntireColumn.AutoFit ' во всём столбце установить выравнивание "Автоподбор ширины" End With Application.EnableEvents = True ' разрешить обработку событий End If End Sub
[/vba]
Да уж, Вадим, по поводу Target(1, 5) и Target(1, 6) когда Target - одна ячейка, это уж как-то не очень корректно. Правильно сказал Саша, что корректнее использовать Offset Саш, я тут на досуге твой код для Вадима откомментировал. Надеюсь, ты не против? [vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) ' обработка события изменения на листе If Target.Cells.Count > 1 Then Exit Sub ' если изменение было больше, чем в одной ячейке - выход ' дальше Target - это одна ячейка If Target.Column = 1 Then ' если Target (изменение на листе) в первом столбце (столбце А) Application.EnableEvents = False ' запретить обработку событий чтобы производимые далее изменения на листе не приводили к повторному циклическому вызову этой же процедуры With Target.Offset(0, 4) ' в ячейке, сдвинутой от ячейки Target на 0 строк и 4 столбца (т.е. с столбце Е) .Value = Time ' значение - текущее время .NumberFormat = "h:mm:ss" ' формат представления чисел в ячейке (время в 24-часовом формате ч:мм:сс) .EntireColumn.AutoFit ' во всём столбце установить выравнивание "Автоподбор ширины" End With
With Target.Offset(0, 5) ' в ячейке, сдвинутой от ячейки Target на 0 строк и 5 столбцов (т.е. с столбце F) .Value = Date ' значение - текущая дата .NumberFormat = "d/m/yyyy" ' формат представления чисел в ячейке (дата Д.М.ГГГГ) .EntireColumn.AutoFit ' во всём столбце установить выравнивание "Автоподбор ширины" End With Application.EnableEvents = True ' разрешить обработку событий End If End Sub
Безусловно, огромное спасибо, господа. Но... Ряд вопросов остался без ответа, ряд разъяснений так и остался за пределами моего понимания, а на ряд ответов возникли новые вопросы ))) Это ни в коем случае, не упрек в ваш адрес. Это обоснование причин, по которым я продолжаю диалог на эту тему Итак: В строке Columns("e:e").NumberFormat = "[$-F400]h:mm:ss AM/PM" что же все-таки значит [$-F400]? (эта строка получена в результате применения макрорекордера, - включил макрорекордер, изменил свойства ячейки, остановил запись, отредактировал, вставил в имеющийся код) Что касается:
Quote (RAN)
Когда Target = [A1:F2], то Target(1, 6) = [F1] б/м понятно A вот когда Target = [A1], и Target(1, 6) = [F1]
Это просто грубая ошибка или такая запись вообще не приемлема, т.к. может в дальнейшем привести к ошибке?
Quote (Alex_ST)
If Target.Cells.Count > 1 Then Exit Sub ' если изменение было больше, чем в одной ячейке - выход ' дальше Target - это одна ячейка
Как понять "если изменение было больше, чем в ОДНОЙ ячейке"?
Quote (Alex_ST)
Application.EnableEvents = False ' запретить обработку событий чтобы производимые далее изменения на листе не приводили к повторному циклическому вызову этой же процедуры
Тут совсем не понял. Без этой строки (по крайней мере в моем макросе) все работает так же, как и с этой строкой. Можно разжевать, в рот положить и еще и проглотить помочь ))) про эту строку макроса? в чем разница между
Quote (Саня)
NumberFormat = "[$-F400]h:mm:ss AM/PM"
и
Quote (Alex_ST)
.NumberFormat = "h:mm:ss"
Ну и с этой строкой я так ничего и не понял
Quote (Саня)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
Безусловно, огромное спасибо, господа. Но... Ряд вопросов остался без ответа, ряд разъяснений так и остался за пределами моего понимания, а на ряд ответов возникли новые вопросы ))) Это ни в коем случае, не упрек в ваш адрес. Это обоснование причин, по которым я продолжаю диалог на эту тему Итак: В строке Columns("e:e").NumberFormat = "[$-F400]h:mm:ss AM/PM" что же все-таки значит [$-F400]? (эта строка получена в результате применения макрорекордера, - включил макрорекордер, изменил свойства ячейки, остановил запись, отредактировал, вставил в имеющийся код) Что касается:
Quote (RAN)
Когда Target = [A1:F2], то Target(1, 6) = [F1] б/м понятно A вот когда Target = [A1], и Target(1, 6) = [F1]
Это просто грубая ошибка или такая запись вообще не приемлема, т.к. может в дальнейшем привести к ошибке?
Quote (Alex_ST)
If Target.Cells.Count > 1 Then Exit Sub ' если изменение было больше, чем в одной ячейке - выход ' дальше Target - это одна ячейка
Как понять "если изменение было больше, чем в ОДНОЙ ячейке"?
Quote (Alex_ST)
Application.EnableEvents = False ' запретить обработку событий чтобы производимые далее изменения на листе не приводили к повторному циклическому вызову этой же процедуры
Тут совсем не понял. Без этой строки (по крайней мере в моем макросе) все работает так же, как и с этой строкой. Можно разжевать, в рот положить и еще и проглотить помочь ))) про эту строку макроса? в чем разница между
Quote (Саня)
NumberFormat = "[$-F400]h:mm:ss AM/PM"
и
Quote (Alex_ST)
.NumberFormat = "h:mm:ss"
Ну и с этой строкой я так ничего и не понял
Quote (Саня)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
Про Application.EnableEvents = False - это только кажется, что работает как и без неё. Вы пошагово выполните код - увидите, что на изменение, вызванное кодом, сам же код и реагирует, но проверку это изменение не проходит. Иначе бы оно зациклилось. Но зачем нам код гонять впустую?
"Как понять "если изменение было больше, чем в ОДНОЙ ячейке"? " - закопипастили например диапазон 10х10...
[vba]
Code
If Not Intersect(Target, Range("A:A")) Is Nothing Then
[/vba] Если Не Пересечение(Цель, Диапазон) Есть Ничего То = Если Не (Пересечение(Цель, Диапазон) Есть Ничего) То сокращаем как в алгебре: Если Пересечение(Цель, Диапазон) Есть То
Про Application.EnableEvents = False - это только кажется, что работает как и без неё. Вы пошагово выполните код - увидите, что на изменение, вызванное кодом, сам же код и реагирует, но проверку это изменение не проходит. Иначе бы оно зациклилось. Но зачем нам код гонять впустую?
"Как понять "если изменение было больше, чем в ОДНОЙ ячейке"? " - закопипастили например диапазон 10х10...
[vba]
Code
If Not Intersect(Target, Range("A:A")) Is Nothing Then
[/vba] Если Не Пересечение(Цель, Диапазон) Есть Ничего То = Если Не (Пересечение(Цель, Диапазон) Есть Ничего) То сокращаем как в алгебре: Если Пересечение(Цель, Диапазон) Есть ТоHugo
Вадим, 1. Запись Target(1, 5) означает ячейку, находящуюся в ДИАПАЗОНЕ ЯЧЕЕК Target в первой строке и пятом столбце. НО ведь у вас в первом же операторе если в Target больше, чем 1 ячейка - выход. Т.е. Target - это ОДНА ЯЧЕЙКА. И о какой тогда ячейке идёт речь в записи Target(1, 5) если там нет ни столбцов, ни строк? Самое интересное и непонятное, что я сейчас попробовал и выяснил, что [vba]
Code
With Target(1, 5)
[/vba] не понятно почему, но вопреки всякой логике РАБОТАЕТ точно так же как вполне корректное[vba]
Code
With Target.Offset(0, 4)
[/vba] Но вполне может работать не везде. И не надо привыкать к такому недокументированному обращению. Тем более, что оно просто не логично (я выше, надеюсь, объяснил, почему?)
2. Target в данной процедуре - это диапазон ячеек, в котором произошло изменение. Изменение могло быть не в одной ячейке, а сразу в нескольких. Например, вы вставили значения сразу в несколько ячеек или выделили какой-то диапазон и нажали Delete. Тогда количество ячеек в Target будет больше одной.
3. Опять же хоть без этого и почему-то работает, но: в процессе ввода макросом времени и даты в ячейки на листе происходят события Worksheet_Change, которые вы собственно этим же макросом и обрабатываете. Т.е. вполне может получиться, что в результате работы макроса он начнёт вызывать сам себя и войдёт в бесконечный цикл. Поэтому перед тем как начать что-то писать в ячейки листа мы запрещаем приложению реагировать на события : Application.EnableEvents = False, а после того, как изменения ячеек макросом закончим, разрешаем обработку событий опять: Application.EnableEvents = True
4. Не люблю и не знаю я эти текстовые описания цифровых форматов... Потому и стараюсь не использовать. В принципе, это есть у Уокенбаха. Если интересно, почитайте.
5. А про Intersect неужели в справке так не понятно написано? Там же всего-то несколько строк:
Quote
Intersect Method Returns a Range object that represents the rectangular intersection of two or more ranges. expression.Intersect(Arg1, Arg2, ...) expression Optional. An expression that returns an Application object. Arg1, Arg2, ... Required Range. The intersecting ranges. At least two Range objects must be specified.
Т.е. в нашем случае: если диапазоны столбца А:А и Target не пересекаются (изменения произошли не в столбце А) и, следовательно, метод Intersect(Target, Range("A:A")) вернёт значение Nothing, то выйти из процедуры.
Вадим, 1. Запись Target(1, 5) означает ячейку, находящуюся в ДИАПАЗОНЕ ЯЧЕЕК Target в первой строке и пятом столбце. НО ведь у вас в первом же операторе если в Target больше, чем 1 ячейка - выход. Т.е. Target - это ОДНА ЯЧЕЙКА. И о какой тогда ячейке идёт речь в записи Target(1, 5) если там нет ни столбцов, ни строк? Самое интересное и непонятное, что я сейчас попробовал и выяснил, что [vba]
Code
With Target(1, 5)
[/vba] не понятно почему, но вопреки всякой логике РАБОТАЕТ точно так же как вполне корректное[vba]
Code
With Target.Offset(0, 4)
[/vba] Но вполне может работать не везде. И не надо привыкать к такому недокументированному обращению. Тем более, что оно просто не логично (я выше, надеюсь, объяснил, почему?)
2. Target в данной процедуре - это диапазон ячеек, в котором произошло изменение. Изменение могло быть не в одной ячейке, а сразу в нескольких. Например, вы вставили значения сразу в несколько ячеек или выделили какой-то диапазон и нажали Delete. Тогда количество ячеек в Target будет больше одной.
3. Опять же хоть без этого и почему-то работает, но: в процессе ввода макросом времени и даты в ячейки на листе происходят события Worksheet_Change, которые вы собственно этим же макросом и обрабатываете. Т.е. вполне может получиться, что в результате работы макроса он начнёт вызывать сам себя и войдёт в бесконечный цикл. Поэтому перед тем как начать что-то писать в ячейки листа мы запрещаем приложению реагировать на события : Application.EnableEvents = False, а после того, как изменения ячеек макросом закончим, разрешаем обработку событий опять: Application.EnableEvents = True
4. Не люблю и не знаю я эти текстовые описания цифровых форматов... Потому и стараюсь не использовать. В принципе, это есть у Уокенбаха. Если интересно, почитайте.
5. А про Intersect неужели в справке так не понятно написано? Там же всего-то несколько строк:
Quote
Intersect Method Returns a Range object that represents the rectangular intersection of two or more ranges. expression.Intersect(Arg1, Arg2, ...) expression Optional. An expression that returns an Application object. Arg1, Arg2, ... Required Range. The intersecting ranges. At least two Range objects must be specified.
Т.е. в нашем случае: если диапазоны столбца А:А и Target не пересекаются (изменения произошли не в столбце А) и, следовательно, метод Intersect(Target, Range("A:A")) вернёт значение Nothing, то выйти из процедуры.Alex_ST
Private Sub Worksheet_Change(ByVal Target As Range) 'тут не совсем понятно ''''target --грубо говоря --копия ячеек, измененных на данном листе
Debug.Print Target.Row, Target.Column If Target.Cells.Count > 1 Then Exit Sub 'тут совсем не понятно ''если выделено более 1 ячейки--выход If Not Intersect(Target, Range("A:A")) Is Nothing Then 'тут ясно, что следим за изменениями в столбце А. Хотелось бы подробней ''если диапазон а:а не выделен --выход '' With Target(1, 5) 'тут указываем ячейку, куда будут вводиться результат вычисления следующей строки '''''''''' причем 1,5 означает вывод ''1--в первую строку таргета ''5--столбец ''''''''''''''''''''''''''''''' .Value = Now 'если по-русски, то =ТДАТА() 'Columns ("e:e") '''не нужна .NumberFormat = "[$-F400]h:mm:ss AM/PM" 'формат ячеек столбца Е - время (ч,мм,сс). Только вот что значит [$-F400]? '''вы запросили формат--только время .EntireColumn.AutoFit 'автовыравнивание End With ''''''''''''''''''''''''''''''' With Target(1, 6) ' .Value = Now ' 'Columns("f:f") '''не нужна .NumberFormat = "d/m/yyyy" 'формат ячеек столбца F - дата (д,м,ггг) ''здесь формат день(1 или 2 цифры), месяц (1 или 2) и год(4) .EntireColumn.AutoFit ' End With End If End Sub
[/vba]
[vba]
Code
Private Sub Worksheet_Change(ByVal Target As Range) 'тут не совсем понятно ''''target --грубо говоря --копия ячеек, измененных на данном листе
Debug.Print Target.Row, Target.Column If Target.Cells.Count > 1 Then Exit Sub 'тут совсем не понятно ''если выделено более 1 ячейки--выход If Not Intersect(Target, Range("A:A")) Is Nothing Then 'тут ясно, что следим за изменениями в столбце А. Хотелось бы подробней ''если диапазон а:а не выделен --выход '' With Target(1, 5) 'тут указываем ячейку, куда будут вводиться результат вычисления следующей строки '''''''''' причем 1,5 означает вывод ''1--в первую строку таргета ''5--столбец ''''''''''''''''''''''''''''''' .Value = Now 'если по-русски, то =ТДАТА() 'Columns ("e:e") '''не нужна .NumberFormat = "[$-F400]h:mm:ss AM/PM" 'формат ячеек столбца Е - время (ч,мм,сс). Только вот что значит [$-F400]? '''вы запросили формат--только время .EntireColumn.AutoFit 'автовыравнивание End With ''''''''''''''''''''''''''''''' With Target(1, 6) ' .Value = Now ' 'Columns("f:f") '''не нужна .NumberFormat = "d/m/yyyy" 'формат ячеек столбца F - дата (д,м,ггг) ''здесь формат день(1 или 2 цифры), месяц (1 или 2) и год(4) .EntireColumn.AutoFit ' End With End If End Sub
то-есть строка With Target(1, 6) подразумевает, что все записи ниже будут относиться к шестому столбцу, то-есть к столбцу F. до тех пор, пока выполнение процедуры не дойдет до End With. А каждая новая строка должна начинаться с точки. Я правильно понял?
Quote (shanemac51)
'Columns("f:f") '''не нужна
то-есть строка With Target(1, 6) подразумевает, что все записи ниже будут относиться к шестому столбцу, то-есть к столбцу F. до тех пор, пока выполнение процедуры не дойдет до End With. А каждая новая строка должна начинаться с точки. Я правильно понял?light26
Т.е. в нашем случае: если диапазоны столбца А:А и Target не пересекаются (изменения произошли не в столбце А) и, следовательно, метод Intersect(Target, Range("A:A")) вернёт значение Nothing, то выйти из процедуры.
Грубо говоря, удаление из кода этой строки приведет к тому, что ввод любого значения в любую ячейку будет отображать в пятом, шестом столбце время и дату внесенных изменений?
Quote (Alex_ST)
Т.е. в нашем случае: если диапазоны столбца А:А и Target не пересекаются (изменения произошли не в столбце А) и, следовательно, метод Intersect(Target, Range("A:A")) вернёт значение Nothing, то выйти из процедуры.
Грубо говоря, удаление из кода этой строки приведет к тому, что ввод любого значения в любую ячейку будет отображать в пятом, шестом столбце время и дату внесенных изменений?light26