Прошу помочь. Пытаюсь переделать следующий код из поста под себя:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Count > 1 Then Exit Sub
If Intersect(.Cells, Columns(2)) Is Nothing Then Exit Sub
If Not IsDate(Cells(.Row, 1)) Then Cells(.Row, 1).Value = Date
If IsEmpty(.Cells) Then Cells(.Row, 1).ClearContents
End With
End Sub
Необходимо при внесении данных в столбцы B,C,D и далее... заполнять в столбце A текущую дату, которая бы оставалась фиксированной. Заполнение даты необходимо так же при заполнении сразу нескольких строк, т.е. в случае вставки данных извне.При использовании кода выше такой возможности нет. Дата проставляется только при построчном заполнении. В случае изменения\удаления данных из одной, двух и более ячеек строки дата в строке не должна меняться.
Получилось что-то вроде:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Count > 1 Then Exit Sub
If Intersect(.Cells, Range("B:P")) Is Nothing Then Exit Sub
If Not IsDate(Cells(.Row, 1)) Then Cells(.Row, 1).Value = Date
End With
End Sub
Однако даты проставляются только при построчном заполнении.
Private Sub Worksheet_Change(ByVal Target As Range)
dim c
With Target
If Intersect(.Cells, Range("B:P")) Is Nothing Then Exit Sub
application.enableevens=0
for each c in .cells
If Not IsDate(Cells(c.Row, 1)) Then Cells(c.Row, 1).Value = Date
next
application.enableevens=-1
End With
End Sub
kuklp, спасибо! Есть небольшой недостаток кода. При любом действии со строками макрос проставляет даты, будь то удаление значений в строках или даже удаление самих строк. Возможно ли как то это обойти? Например, добавить условие, при котором в случае отсутствия значений в столбцах ("B:P"), столбец A бы очищался?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c
With Target
If Intersect(.Cells, Range("B:P")) Is Nothing Then Exit Sub
Application.EnableEvents = 0
For Each c In .Cells
If Not IsDate(Cells(c.Row, 1)) Then Cells(c.Row, 1).Value = Date
If IsEmpty(c.Cells) Then Cells(c.Row, 1).ClearContents
Next
Application.EnableEvents = -1
End With
End Sub
Но дата удаляется при редактировании любой ячейки в диапазоне.
Еще так пробовал:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c
With Target
If Intersect(.Cells, Range("B:P")) Is Nothing Then Exit Sub
Application.EnableEvents = 0
For Each c In .Cells
If Not IsDate(Cells(c.Row, 1)) Then Cells(c.Row, 1).Value = Date
If Application.CountBlank(Range("B:P")) = 0 Then Cells(c.Row, 1).ClearContents
Next
Application.EnableEvents = -1
End With
End Sub
vikttur, я никого не заставляю их создавать. У меня попросту нет возможности заливать файлы с рабочего ПК... Чтобы проверить данный код даже не нужны тестовые данные, достаточно пустого файла с указанным выше макросом. Как доберусь до дома, создам новую книгу, скопирую макрос и выложу раз все так сложно
kuklp написал: со вчерашнего дня у Вас была гора таких возможностей,
Откуда Вы знаете, Вы что следите за мной?
Файл выложил. Есть небольшой нюанс - дома у меня mac os и макрос в excel 2016 почему то не работает, но у Вас, по идее, работать должен. Если не будет, походу придется ставить винду второй осью
Так и не решил проблему. Сейчас есть следующий код:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c
With Target
If Intersect(.Cells, Range("B:P")) Is Nothing Then Exit Sub
Application.EnableEvents = 0
For Each c In .Cells
If Not IsDate(Cells(c.Row, 1)) Then Cells(c.Row, 1).Value = Date
If Application.CountBlank(Cells.Range("B:P")) = 0 Then Cells(c.Row, 1).ClearContents
If IsEmpty(c.Cells) Then Cells(c.Row, 1).ClearContents
Next
Application.EnableEvents = -1
End With
End Sub
Данный код производит очистку столбца A при любых манипуляциях (удаление, редактирование) с ячейкой диапазона "B:P". Необходима очистка столбца А только при отсутствии данных во всем диапазоне "B:P". Прошу помочь.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a()
Dim i As Long, r As Long, c As Long
Dim Rng As Range
Set Rng = Intersect(Target, Me.UsedRange.EntireRow.Range("A:P"))
If Rng Is Nothing Then Exit Sub
Set Rng = Intersect(Rng.EntireRow, Me.Range("A:P"))
a() = Rng.Value
For r = 1 To UBound(a)
i = 0
For c = 2 To UBound(a, 2)
If Len(Trim(a(r, c))) > 0 Then
i = 1
If Len(Trim(a(r, 1))) = 0 Then a(r, 1) = Date
Exit For
End If
Next
If i = 0 Then a(r, 1) = Empty
Next
exit_:
Application.EnableEvents = False
Rng.Columns(1).Value = a()
Application.EnableEvents = True
End Sub