@MrRaden

Как установить марос в Ecel так, чтоб он показывал дату изменения данных в нескольких столбцах?

5f1b0785625fb952922529.png
Здравствуйте. Сразу скидываю скрин файла.
Что требуется:
Чтобы при изменении данных в столбцах G-J(желтых) время изменения этих столбцов сохранялось в столбце О.
Проблема:
В коде стоит смещение на 5 клеток вправо, и прога разбрасывает даты куда попало, а нужно что в столбец "О" - "Время"
Вот код:

Private Sub Worksheet_Change(ByVal Target As Range)
     
    For Each cell In Target   'проходим по всем измененным ячейкам
       If Not Intersect(cell, Range("J4:J200, G4:G200, H4:H200, I4:I200")) Is Nothing Then  'если изменененная ячейка попадает в диапазон J4:J200
            With cell.Offset(0, 5)         'вводим в пятую справа ячейку дату
               .Value = Now
               .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
            End With
       End If
    Next cell
End Sub


Помогие чайнику, плз.
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 2
KEugene
@KEugene
Так оно все правильно делает. Смещение идет не куда попало, а на 5 столбцов вправо относительно текущей ячейки cell. Просто возьмите номер строки этой ячейки row и впишите в Range("O"&row).Value.
Либо анализировать каждый диапазон пересечения (If Not Intersect(cell, Range("J4:J200, ...) со своим собственным смещением. Например, для J4:J200 будет Offset(0, 5), для G4:G200 - Offset(0, 8) и т.д.
Ответ написан
Комментировать
rewen
@rewen
#byrew
Private Sub Worksheet_Change(ByVal Target As Range)


    For Each cell In Target   'проходим по всем измененным ячейкам
       If Not Intersect(cell, Range("J4:J200, G4:G200, H4:H200, I4:I200")) Is Nothing Then  'если изменененная ячейка попадает в диапазон J4:J200
            Dim colDateBegin&, colDateEnd&
            colDateBegin = 12
            colDateEnd = 13
            
            Dim intEntryRow&
            intEntryRow = cell.row
            
            With cell.Parent.Range         'вводим в пятую справа ячейку дату
               .Cells(intEntryRow, colDateBegin).value = Now
               .Cells(intEntryRow, colDateBegin).AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
               .Cells(intEntryRow, colDateEnd) = Now: .Cells(intEntryRow, colDateEnd).AutoFit
            End With
       End If
    Next cell
End Sub
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы