2015-02-03 2 views
0

Я использую следующее изменение листа для копирования информации из листа 1 в лист 2, если диапазон C: C имеет дату в нем. Но я хотел бы вставить форму Time Stamp в Range C: C, чтобы автоматически генерировать дату. Мне было интересно, как я могу изменить код VBA, чтобы он распознал формулу, которая теперь будет в этом диапазоне? Благодаря!!Изменение рабочего листа, которое распознает формулу в целевом диапазоне

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim nextRow As Long 
    If Not Intersect(Target, Range("C:C")) Is Nothing Then 
     If VBA.IsDate(Target) Then 
      With Worksheets("Summary") 
       nextRow = IIf(VBA.IsEmpty(.Range("A1048576").End(xlUp)), 1, .Range("A1048576").End(xlUp).Row + 1) 
       .Range("A" & nextRow) = Target.Offset(0, -2) 
       .Range("B" & nextRow) = Target.Offset(0, -1) 
       .Range("E" & nextRow) = Target 
       .Range("H" & nextRow) = Target.Offset(0, 5) 
      End With 
     End If 
    End If 
End Sub 

ответ

0

Код, который вы должны работать как есть. Функция IsDate «возвращает значение True, если [выражение, которое вы передаете] имеет тип данных даты или может быть преобразовано в Date». Диапазон, значение которого является датой, может быть преобразовано в Date, поэтому ячейки с вашей формулой, возвращающей дату, должны быть распознаны. (Я проверил это экспериментально.)

Единственное ограничение в том, что если вы хотите, чтобы скопировать значения, а не формулы (возможно существенной, если формула является контекстно-зависимой), вы должны заменить

.Range("E" & nextRow) = Target 

с

.Range("E" & nextRow) = Target.Value 

и аналогично добавить .Value после любого из Offsets, которые могут содержать формулы, которые вы не хотите копировать.

Смежные вопросы