2016-09-28 165 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到所有单元C2到C22。

有人可以帮我正确写这段代码吗?

+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 
相关问题