我得到运行时错误9

我正在制作哪个表有变化的表需要被复制到另一个表,需要同步数据传输槽表,如果我们填写一个表单数据需要传输到所有表单。

Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Set KeyCells = Range("C4:E8") If Not Application.Intersect(KeyCells, Range(Target.Address)) _ Is Nothing Then Worksheets("sheet1").Range("D4:D8").Copy _ Destination:=Worksheets("sheet2").Range("D4:D8") 'MsgBox "Cell " & Target.Address & " has changed." Just for code testing don't look at it End If End Sub 

想象一下,你只有2个工作表。 将下面的代码放在第一个工作表上,在这里:

在这里输入图像说明

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range If Target.Count > 1 Then MsgBox ("More than 1!") Exit Sub End If Set KeyCells = Range("C4:E8") If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then Worksheets(1).Range("C4:E8").Copy Destination:=Worksheets(2).Range("C4:E8") End If End Sub 

C4:E8更改数据后,它将被复制到第二个工作表中。


如果你把它放在第二个工作表上,这会产生一个很好的recursion错误。 试试看,如果你愿意! 🙂

编辑:这个问题有很多方法来做到这一点。 这是循环遍历单元格的一种方式:

 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim KeyCells As Range Dim rngCell As Range Set KeyCells = Worksheets(1).Range("C4:E8") If Not Application.Intersect(KeyCells, Target) Is Nothing Then For Each rngCell In KeyCells Worksheets(2).Cells(rngCell.Row, rngCell.Column) = rngCell Next rngCell End If End Sub 

但是,如果您在worksheets(1)worksheets(2)合并了单元格,

使用后

选项显式

私人小组Worksheet_Change(BYVAL目标作为范围)

 Dim KeyCells As Range Dim rngCell As Range Set KeyCells = Worksheets(1).Range("C4:E8") If Not Application.Intersect(KeyCells, Target) Is Nothing Then For Each rngCell In KeyCells Worksheets(2).Cells(rngCell.Row, rngCell.Column) = rngCell Next rngCell End If 

在这里input图像说明