Может ли код VBA обновить ячейку в столбце рабочей таблицы Excel, когда пользователь вводит данные в заданном диапазоне столбцов c? - PullRequest
0 голосов
/ 23 января 2020

У меня есть лист Excel, ширина которого составляет 12 столбцов, а глубина - много строк. Я пытаюсь написать Sub Workshop_Change Sub, который заставит рабочий лист автоматически вставить текущую дату / время, используя функцию Now, в столбец L (или 12) в той же строке, в которой данные были изменены в ячейке в столбцах AK. или от 1 до 11.

До сих пор я пытался использовать функцию Offset для достижения sh этого, но я могу добиться успеха только в выполнении относительных обновлений, а не частично абсолютных обновлений. Я попытался использовать функцию «Выбрать», чтобы заменить переменную функции смещения для смещения столбца в зависимости от того, на какую ячейку ориентирован пользователь, но я также не могу заставить это работать. Прямо сейчас я пытаюсь использовать это, но безрезультатно:

Sub Worksheet_Change(ByVal Target As Range)
Dim WorkRng As Range

Offst As Integer
End Type
Set WorkRng = Range("A:K")
If Not Application.Intersect(WorkRng, Range(Target.AddressLocal)) _
Is Nothing Then
If Target.Column = 1 Then Offst = 11
ElseIf Target.Column = 2 Then Offst = 10
ElseIf Target.Column = 3 Then Offst = 9
ElseIf Target.Column = 4 Then Offst = 8
ElseIf Target.Column = 5 Then Offst = 7
ElseIf Target.Column = 6 Then Offst = 6
ElseIf Target.Column = 7 Then Offst = 5
ElseIf Target.Column = 8 Then Offst = 4
ElseIf Target.Column = 9 Then Offst = 3
ElseIf Target.Column = 10 Then Offst = 2
ElseIf Target.Column = 11 Then Offst = 1
End If
    With Offst
            Target.Offset(0, Offst).Value = Now
            Target.Offset(0, Offst).NumberFormat = "dd-mmm-yyyy AM/PM"
    End With
End Sub

Я очень доволен c с VBA, и у меня мало времени позади. Я немного искал inte rnet, и мне хотелось бы думать, что я довольно хорошо истощаю поисковые системы, но не могу найти то, что напрямую связано с моей ситуацией. Я могу только найти примеры людей, обновляющих один столбец данных, а не диапазон.

Любая помощь очень ценится! Спасибо, что нашли время!

1 Ответ

1 голос
/ 23 января 2020

Нет необходимости в смещении. Вы можете жестко кодировать L и использовать Intersect вместе с Target.EntireRow для обновления соответствующих строк в столбце L.

Упрощенно, весь код может быть:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Me.Range("A:K"), Target) Is Nothing Then Exit Sub

    Intersect(Me.Columns("L"), Target.EntireRow).Value = Now
    Intersect(Me.Columns("L"), Target.EntireRow).NumberFormat = "dd-mmm-yyyy AM/PM"
End Sub
...