2013-06-17 4 views
0
Cells(R, DataCol).Resize(, ColumnCount).Copy 
Cells(R, DataCol).Offset(RowOffset * (R - StartRow), ColOffset).PasteSpecial xlValues 

Привет всем, Когда я использую приведенный выше код работает с модуля, это вызывает изменение Вэл, написанное на листеИзменения по Валу, цель в диапазоне не распознается

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Column = 15 Then 
    Target.Offset(0, 1).Value = Now() 
    End If 
End Sub 

Теперь клетки часть кода копирует блок из четырех ячеек в столбец 12, достигая до столбца 15, но изменение val не распознает 15-й столбец как имеющий измененное значение. Однако, когда я меняю целевую колонку на 11,

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Column = 11 Then 
    Target.Offset(0, 1).Value = Now() 
    End If 
End Sub 

Значение изменяется для всего блока ячеек, поэтому сделаны четыре изменения цели

Спасибо.

+0

'Target' может быть диапазон мульти-элементный, так что вы должны принять во внимание, что в вашем коде. –

+0

@tim Да, это диапазон нескольких ячеек, как я могу это учитывать в коде? – Elliot

ответ

0

Как обрабатывать объект для учета> 1 ячейки в диапазоне:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim c as Range 

For each c in Target.cells 
    If c.Column = 11 Then 
     c.Offset(0, 1).Value = Now() 
    End If 
Next c 

End Sub 

или:

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rng as Range 

Set rng = Application.Intersect(Target, Me.Columns(11)) 
If not rng is nothing then 
    rng.Offset(0, 1).Value = Now() 
End If 

End Sub 

Также хорошая идея, чтобы отключить события, прежде чем обновить таблицу с вашего Change подразделам (иначе вы просто запускаете событие с обновлением). Используйте

Application.EnableEvents=False 

затем установить обратно Правда, когда сделано (не забывайте, что часть!)

+0

Я использовал первый метод «Dim C as range», и он отлично работает. Я пытаюсь понять механизм - кажется, когда вы пробиваете «для каждого c», он просто перезаписывает дату в одну ячейку, вместо того, чтобы записывать дату в четыре отдельные ячейки? – Elliot

+0

Он просто пропускает все измененные ячейки не в столбце 11. В исходном коде вы проверяли значение «Target.Column»: если Target - это многоячеечный диапазон, тогда '.Column' просто проверяет верхнюю левую ячейку этот диапазон и возвращает только столбец для этой ячейки. –

+0

Gotcha, спасибо. Я положил еще одну запись с кодом «If c.Value <> Empty or c.Value = 0 Then End If« Я пытаюсь добавить, чтобы игнорировать любые ячейки ячеек и 0 значений. Этот код, который я написал, не работает, хотя http://stackoverflow.com/q/17177581/2457533 – Elliot