【发布时间】:2015-05-13 22:22:05
【问题描述】:
我有多个数据工作表中的数据想要合并到摘要工作表中。 当用户更新任何数据工作表中的数据时,它会自动将信息复制到摘要工作表。
例如
(输入)数据工作表1
| A | B | C |
Cat Red Male
Dog Green Female
(输入)数据工作表2
| A | B | C |
Monkey Brown Male
Ant Blue Male
Bird White Female
(输出)摘要工作表
| A | B | C |
Cat Red Male
Dog Green Female
Monkey Brown Male
Ant Blue Male
Bird White Female
现在我的代码在一张数据工作表上运行良好。但是当我尝试切换到另一个数据工作表时,汇总工作表上的数据将不正确。当我删除所有信息或更改代码时,它也会出现一些错误(我需要重新打开它)。
这是我的代码
这本工作簿
Public Sub Workbook_Open()
Set WB = ThisWorkbook
Set ActWS = WB.ActiveSheet
Set MainWS = WB.Worksheets("Main")
ActWSPreLastRow = ActWS.Cells(ActWS.Rows.Count, "A").End(xlUp).Row
MainWSPreLastRow = MainWS.Cells(MainWS.Rows.Count, "A").End(xlUp).Row
End Sub
模块
Public WB As Workbook
Public ActWS As Worksheet
Public MainWS As Worksheet
Public ActWSPreLastRow As Long
Public ActWSStoredLastRow As Long
Public MainWSPreLastRow As Long
Public MainWSStoredLastRow As Long
Public MainWSEndLastRow As Long
Public I As Long
Public Sub DoCopy()
Set WB = ThisWorkbook
Set ActWS = WB.ActiveSheet
Set MainWS = WB.Worksheets("Main")
ActWSPreLastRow = ActWS.Cells(ActWS.Rows.Count, "A").End(xlUp).Row
MainWSPreLastRow = MainWS.Cells(MainWS.Rows.Count, "A").End(xlUp).Row
I = MainWSStoredLastRow + (ActWSPreLastRow - ActWSStoredLastRow)
MainWS.Range("A" & MainWSStoredLastRow + 1, "AQ" & I).Value = _
ActWS.Range("A" & ActWSStoredLastRow + 1, "AQ" & ActWSPreLastRow).Value
MainWSPreLastRow = MainWS.Cells(MainWS.Rows.Count, "A").End(xlUp).Row
End Sub
Public Sub StoreOld()
ActWSStoredLastRow = ActWSPreLastRow
MainWSStoredLastRow = MainWSPreLastRow
End Sub
其他工作表
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("A5:AQ1000")) Is Nothing Then
Call StoreOld
Call DoCopy
End If
End Sub
【问题讨论】:
-
创建一个简单的 Microsoft 查询,如下所示:stackoverflow.com/questions/30119513/… -
Join both部分。然后在需要时简单地刷新它