2016-09-28 2 views
0

Я новичок в VBA, и я пытаюсь скопировать значения из одной ячейки в несколько ячеек, когда изменяется ее значение.Копировать значение ячейки в диапазон ячеек

Значение A2 постоянно меняется, и когда это произойдет, я хочу, что значение, которое будет скопирован в ячейки C2: C21 (и затем в конечном счете к клеткам D2: D21)

Ниже приведен пример того, что я хотел для достижения:

http://i.stack.imgur.com/xJZyZ.jpg

до сих пор я писал этот код:

Sub Worksheet_Change(ByVal Target As Range) 
    For i = 0 To 19 
     If Not Intersect(Target, Range("AS2")) Is Nothing Then 
     Cells(Target.Row + i, 58).Value = Cells(Target.Row, 45).Value 
     End If 
    Next i 
End Sub 

, но это только копии один единственное значение A2 для всех ячеек С2-С22.

Может кто-нибудь помочь мне написать этот код правильно?

+3

Ничто в этом коде не apperas для обработки ячеек A2, ни C2: C21, ни D2: D21 ... –

ответ

1
Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Range("AS2")) Is Nothing Then 
     For CurCol = 3 to 4 
      For CurRow = 2 to 21 
       If Cells(CurRow, CurCol).Value = "" Then 
        Cells(CurRow, CurCol).Value = Target.Value 
        Exit Sub 
       EndIf 
      Next CurRow 
     Next CurCol 
    End If 
End Sub 
+0

Если это работает вы, пожалуйста, примите зеленую галочку. – Chrismas007

+1

, добавляя 'Application.EnableEvents = False' перед любым оператором, делающим изменения рабочей книги/рабочего листа, а затем обрабатывая ошибки, чтобы запустить' Application.EnableEvents = True', всегда является хорошей практикой в ​​обработчике событий Worksheet_Change – user3598756

0

Я думаю, это то, что вы после:

Option Explicit 

Sub Worksheet_Change(ByVal Target As Range) 
    Dim nVals As Long 

    If Not Intersect(Target, Range("A2")) Is Nothing Then 
     With Range("C2:D21") 
      nVals = WorksheetFunction.CountA(.Cells) 
      If nVals = .Count Then Exit Sub 
      Application.EnableEvents = False 
      On Error GoTo exitsub 
      .Cells(nVals Mod .Rows.Count + 1, IIf(nVals >= .Rows.Count, 2, 1)).Value = Target.Value 
     End With 
    End If 

exitsub: 
Application.EnableEvents = True 
End Sub 
Смежные вопросы