无法复制到其他工作表

我尝试了不同的方式来解决这个问题,但没有find任何解决办法。 希望有人在这里能解决我的问题。 我有一个由20多个标签组成的电子表格,每个标签都从不同的网站提取数据,所有这些数据格式一致。 我试图在源数据更改时将数据存档在另一个名为“存档”的表中。

这是我正在使用的VBA代码:

Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Column = 3 And UCase(Target) = "2016." Then Cells(Target.Row, Target.Column).EntireRow.Copy _ Destination:=Sheets("Archive").Range("A" & Rows.Count).End(xlUp).Offset(1) End If Application.EnableEvents = True End Sub 

如果有人帮我在这里,我会很感激。

请参阅本答复 ,其中介绍了如何使查询表响应事件。

在下面引用的相关详细信息中,如果需要将整个表复制到归档,则需要编写一些代码来复制所有数据(例如,使用查询表的ResultRange.Address属性)这将是:

 Me.cQT.ResultRange.Copy Destination:=Sheets("Archive").Range("A" & Rows.Count).End(xlUp).Offset(1) 

如果您需要根据条件有条件地循环/复制行,则需要编写该代码,例如:

 Dim rng as Range For each rng in Me.cQT.ResultRange.Rows If rng.Cells(3).Value = "2016." Then rng.Copy Destination:=Sheets("Archive").Range("A" & Rows.Count).End(xlUp).Offset(1) End If Next 

(或类似的东西,我不确定你需要实现什么逻辑)

如何为QueryTable添加事件处理程序

创build一个名为clsEvents_QueryTable的类模块(或者您可以将其命名为其他内容,只是在其余代码中保持一致)。 把这个代码,这将允许你build立一个QueryTable对象的事件处理程序,以及两个事件的过程。

 Option Explicit Public WithEvents cQT As Excel.QueryTable Private Sub Class_Initialize() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) '## Modify as needed Set cQT = ws.QueryTables.Item(1) '## Modify as needed End Sub Private Sub cQT_AfterRefresh(ByVal Success As Boolean) '### ' Code placed in, or called *from* this procedrure will run AFTER refresh MsgBox Me.cQT.Name & " has been refreshed" End Sub Private Sub cQT_BeforeRefresh(Cancel As Boolean) '### ' Code placed in, or called *from* this procedrure will run BEFORE refresh MsgBox Me.cQT.Name & " Archiving Before refreshing..." Me.cQT.ResultRange.Copy Destination:=Sheets("Archive").Range("A" & Rows.Count).End(xlUp).Offset(1) End Sub 

把它放在标准模块的顶部:

 Public QT As clsEvents_QueryTable 

在您的ThisWorkbook模块中,执行以下操作:

 Option Explicit Private Sub Workbook_Open() If QT Is Nothing Then Set QT = New clsEvents_QueryTable End If End Sub 

(你可以在其他模块中做到这一点,但这只是一个例子)。

现在,表中有两个事件处理程序,每当刷新QueryTable时,它将自动调用包含或从事件处理程序调用的代码。

你可以扩展这个来处理多个QueryTables,并进行一些修改(使用一个对象集合等等)。