无法复制到其他工作表
我尝试了不同的方式来解决这个问题,但没有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,并进行一些修改(使用一个对象集合等等)。