热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实时将来自多个工作表的数据组合到摘要工作表中-Realtimecombinedatafrommultipleworksheetsintoasummaryworksheet

IhavedatainmultipleDataworksheetsthatwanttocombineintoSummaryworksheet.Whenuserupdat

I have data in multiple Data worksheets that want to combine into Summary worksheet. When user update data in any Data worksheet, it will copy information automatically to Summary worksheet.

我有多个数据工作表中的数据要合并到摘要工作表中。当用户更新任何数据工作表中的数据时,它会自动将信息复制到摘要工作表。

For example

(Input) Data worksheet1

(输入)数据工作表1

 |   A   |    B   |   C   |
    Cat      Red     Male
    Dog     Green   Female

(Input) Data worksheet2

(输入)数据工作表2

 |   A   |    B   |   C   |
  Monkey   Brown    Male
    Ant     Blue     Male
   Bird     White   Female

(Output) Summary Worksheet

(输出)摘要工作表

 |   A   |    B   |   C   |
    Cat      Red     Male
    Dog     Green   Female
  Monkey    Brown    Male
    Ant     Blue     Male
   Bird     White   Female

Right now my code running okay with one data worksheet. But when I try to switch to work on another data worksheet, the data on summary worksheet will not correct. It also has some errors when I delete all information or when I change the code (I need to reopen it).

现在我的代码运行正常,有一个数据工作表。但是,当我尝试切换到另一个数据工作表上的工作时,摘要工作表上的数据将无法更正。当我删除所有信息或更改代码时(我需要重新打开它),它也有一些错误。

Here is my code

这是我的代码

ThisWorkBook

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

Module

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

Other worksheets

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

1 个解决方案

#1


Microsoft Query to the rescue:

微软查询救援:

SELECT A,B,C FROM [Sheet1$] 
UNION ALL
SELECT A,B,C FROM [Sheet2$] 

Data->From Other Sources->Microsoft Query or feel free to use my Add-In.

数据 - >来自其他来源 - > Microsoft Query或随意使用我的加载项。

Then simply refresh the Query when needed (via 1 line VBA or right-click on the table and click refresh).

然后只需在需要时刷新查询(通过1行VBA或右键单击表并单击刷新)。

Details

Assuming that the structure of Sheet1 & Sheet2 are:

假设Sheet1和Sheet2的结构是:

(Input) Data worksheet1 (with row numbers)

(输入)数据工作表1(带行号)

 1    |   A   |    B   |   C   |
 2       Cat      Red     Male
 3       Dog     Green   Female

(Input) Data worksheet2 (with row numbers)

(输入)数据工作表2(带行号)

 1    |   A   |    B   |   C   |
 2     Monkey   Brown    Male
 3       Ant     Blue     Male
 4      Bird     White   Female

Then:

  1. Create a new worksheet (Sheet3)

    创建一个新工作表(Sheet3)

  2. Create the Query with the SQL above.

    使用上面的SQL创建查询。

If you want to add a condition add a WHERE clause to one or both of the SELECTs

如果要添加条件,请向一个或两个SELECT添加WHERE子句


推荐阅读
  • 本文探讨了如何使用Scrapy框架构建高效的数据采集系统,以及如何通过异步处理技术提升数据存储的效率。同时,文章还介绍了针对不同网站采用的不同采集策略。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • OBS Studio自动化实践:利用脚本批量生成录制场景
    本文探讨了如何利用OBS Studio进行高效录屏,并通过脚本实现场景的自动生成。适合对自动化办公感兴趣的读者。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 视觉Transformer综述
    本文综述了视觉Transformer在计算机视觉领域的应用,从原始Transformer出发,详细介绍了其在图像分类、目标检测和图像分割等任务中的最新进展。文章不仅涵盖了基础的Transformer架构,还深入探讨了各类增强版Transformer模型的设计思路和技术细节。 ... [详细]
  • td{border:1pxsolid#808080;}参考:和FMX相关的类(表)TFmxObjectIFreeNotification ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 3.[15]Writeaprogramtolistallofthekeysandvaluesin%ENV.PrinttheresultsintwocolumnsinASCIIbet ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • Java 中的十进制样式 getZeroDigit()方法,示例 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
author-avatar
迷雾飘渺2702932540
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有