Прошу вашей помощи, ибо в макросах я полный ноль. Нашёл в интернете макрос для автоматической вставки текущей даты в столбец по двойному клику.
1. Макрос работает только в пределах одного столбца (в моём случае - 5), а необходимо, чтобы можно было вставлять дату в несколько столбцов (допустим, в 3 разных столбца - №5, №7, №9). Я так понимаю, нужно просто добавить дополнительные условия, но когда я ввожу такую комбинацию:
[vba]
Код
If Target.Column <> 5 Or Target.Column <> 7 Or Target.Column <> 9 Then
[/vba]
макрос отказывается работать. Как поправить - ума не приложу.
2. В идеале хотелось бы, чтобы можно было в макросе задавать диапазон работы. Например, чтобы он работал только в обозначенных столбцах при номерах строк от 5 до 30.
Пожалуйста, помогите разобраться!
Здравствуйте, уважаемые участники форума!
Прошу вашей помощи, ибо в макросах я полный ноль. Нашёл в интернете макрос для автоматической вставки текущей даты в столбец по двойному клику.
1. Макрос работает только в пределах одного столбца (в моём случае - 5), а необходимо, чтобы можно было вставлять дату в несколько столбцов (допустим, в 3 разных столбца - №5, №7, №9). Я так понимаю, нужно просто добавить дополнительные условия, но когда я ввожу такую комбинацию:
[vba]
Код
If Target.Column <> 5 Or Target.Column <> 7 Or Target.Column <> 9 Then
[/vba]
макрос отказывается работать. Как поправить - ума не приложу.
2. В идеале хотелось бы, чтобы можно было в макросе задавать диапазон работы. Например, чтобы он работал только в обозначенных столбцах при номерах строк от 5 до 30.
Target.Column <> 5 Or Target.Column <> 7 Or Target.Column <> 9
[/vba] всегда истинно
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) On Error GoTo ErrorEvent ' Только одна ячейка If Target.Cells.Count > 1 Then Exit Sub End If
' Только для пятой колонки. В остальных случаях ничего не делаем ' If Target.Column <> 5 Then
Dim rngIn As Range Set rngIn = Range("E:E,G:G,I:I") MsgBox rngIn.Address
Set rngIn = Range("E:I") ' можно так MsgBox rngIn.Address
' можно так Set rngIn = Union(Columns(5), Columns(7), Columns(9)) MsgBox rngIn.Address
' или так - "в обозначенных столбцах при номерах строк от 5 до 30" Set rngIn = Intersect( _ Union(Columns(5), Columns(7), Columns(9)), _ Rows("5:30") _ ) MsgBox rngIn.Address
' если таргет не пересекает нашу область (т.е., не входит в нее), то выход If Intersect(rngIn, Target) Is Nothing Then Exit Sub
' Чтобы избежать зацикливания Application.EnableEvents = False ' Если ячейка пустая -- ставим дату If Target.Offset(0, 0).Value = "" Or IsNull(Target.Offset(0, 0).Value) Then Target.Offset(0, 0).Value = Date ' ==== Обратите внимание! =========================== ' отменяем действие двойного щелчка по-умолчанию, _ т.е. переход в режим редактирования ячейки Cancel = True ' =========================== Обратите внимание! ====
End If
ExitNormally: ' Возвращаем всё взад Application.EnableEvents = True Exit Sub ErrorEvent: MsgBox Err.Description Resume ExitNormally End Sub
[/vba]
[vba]
Код
Target.Column <> 5 Or Target.Column <> 7 Or Target.Column <> 9
[/vba] всегда истинно
[vba]
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) On Error GoTo ErrorEvent ' Только одна ячейка If Target.Cells.Count > 1 Then Exit Sub End If
' Только для пятой колонки. В остальных случаях ничего не делаем ' If Target.Column <> 5 Then
Dim rngIn As Range Set rngIn = Range("E:E,G:G,I:I") MsgBox rngIn.Address
Set rngIn = Range("E:I") ' можно так MsgBox rngIn.Address
' можно так Set rngIn = Union(Columns(5), Columns(7), Columns(9)) MsgBox rngIn.Address
' или так - "в обозначенных столбцах при номерах строк от 5 до 30" Set rngIn = Intersect( _ Union(Columns(5), Columns(7), Columns(9)), _ Rows("5:30") _ ) MsgBox rngIn.Address
' если таргет не пересекает нашу область (т.е., не входит в нее), то выход If Intersect(rngIn, Target) Is Nothing Then Exit Sub
' Чтобы избежать зацикливания Application.EnableEvents = False ' Если ячейка пустая -- ставим дату If Target.Offset(0, 0).Value = "" Or IsNull(Target.Offset(0, 0).Value) Then Target.Offset(0, 0).Value = Date ' ==== Обратите внимание! =========================== ' отменяем действие двойного щелчка по-умолчанию, _ т.е. переход в режим редактирования ячейки Cancel = True ' =========================== Обратите внимание! ====
End If
ExitNormally: ' Возвращаем всё взад Application.EnableEvents = True Exit Sub ErrorEvent: MsgBox Err.Description Resume ExitNormally End Sub
При двойном клике по ячейке выскакивает сообщение с текстом ""E:E,G:G,I:I"", как его убрать? Оно совершенно не нужно. Первый вариант макроса работает без всякого выскакивающего сообщения
При двойном клике по ячейке выскакивает сообщение с текстом ""E:E,G:G,I:I"", как его убрать? Оно совершенно не нужно. Первый вариант макроса работает без всякого выскакивающего сообщения paninaro
Сообщение отредактировал paninaro - Среда, 19.02.2014, 15:44