ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 424|回复: 14

[求助] 父表与相关联的子表合并成一份Excel表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-13 13:24 | 显示全部楼层 |阅读模式
以前的做法是将数据记录在一个Excel表格中,其中总账作为明细总账,并为每个产品名称创建子表,然后通过超链接将这些子表链接到总账中。随着时间的推移,子表数量增加至近10万个,导致在打开总账时,系统读取这些子表变得非常缓慢。如果最初将这些产品明细以“工作表”的形式在父表中创建,打开父表的响应速度会显著提高。
那如何用VBA代码把已创建的父表(父表名称1.xlsm) 相关联的子表(通过超链接打开,存放路径:B:\ww\)合并成一份xlsm表,合并后各表的工作表保持独立(不合并成一份工作表)且合并完成后删除源文件后超链接 公式不会失效?
未合并前,父表是总账,有且只有一个工作表(名称Sheet1),子表也是有且只有一个工作表(名称Sheet1).我们需要更加精确地处理超链接更新。我们需要移除旧的超链接,然后在同一个单元格中添加新的超链接。还有复制子表到父表后工作表名称也相应改为子表文件名称,比如子表文件名为A.xlsx,那相应工作表名称也改为A

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-13 13:25 | 显示全部楼层
不管最后有没有帮上忙,都要谢谢你们

TA的精华主题

TA的得分主题

发表于 2024-6-13 15:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
最重要的是,你要先上个附件,没有附件谁来了也帮不了你。

TA的精华主题

TA的得分主题

发表于 2024-6-13 15:45 | 显示全部楼层
看你表格是否规范,规范的话用ADO因该比较快的,既然用VBA了,公式最好舍弃,那是卡顿的根源

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-13 16:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ykcbf1100 发表于 2024-6-13 15:31
最重要的是,你要先上个附件,没有附件谁来了也帮不了你。

见附档!


TEST.7z

41.53 KB, 下载次数: 13

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-13 16:58 | 显示全部楼层
tanglf188 发表于 2024-6-13 15:45
看你表格是否规范,规范的话用ADO因该比较快的,既然用VBA了,公式最好舍弃,那是卡顿的根源

哦哦,还有这么一回事啊,谢谢,长见识了。

关于系统卡顿,像当EXCEL细小的文件过多,写入磁盘占用的扇区越分散,越容易产生磁盘碎片,当读取小文件,磁盘磁头不断的寻道;小文件过多也会占用大量文件表项资源,使文件系统管理效率降低,当系统需要不断读取细小文件使,系统就会表现得很卡

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-13 17:07 | 显示全部楼层
关于系统卡顿,像当EXCEL细小的文件过多,写入磁盘占用的扇区越分散,越容易产生磁盘碎片,当读取小文件,磁盘磁头不断的寻道;小文件过多也会占用大量文件表项资源,使文件系统管理效率降低,当系统需要不断读取细小文件时,系统就会表现得很卡

TA的精华主题

TA的得分主题

发表于 2024-6-13 17:26 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-14 08:14 | 显示全部楼层
我查看下附档,有EXCEL文件(数据), image.png
不知道我所理解的数据跟你所说的是不是一样

TA的精华主题

TA的得分主题

发表于 2024-6-14 08:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 拷贝()
Application.ScreenUpdating = False
Dim arr()
Dim sh As Worksheet
Dim ww As Workbook
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
lj = ThisWorkbook.Path
Set f = fs.getfolder(lj)
For Each fd In f.subfolders
    n = n + 1
    ReDim Preserve arr(1 To n)
    arr(n) = fd.Name
Next
Set f = Nothing
Set fs = Nothing
Application.DisplayAlerts = False
For Each sh In Sheets
    If sh.Index > 1 Then
        sh.Delete
    End If
Next sh
Application.DisplayAlerts = True
Set ww = ThisWorkbook
For i = 1 To n
    f = Dir(lj & "\" & arr(i) & "\*.xls*")
    Do While f <> ""
        If f <> ThisWorkbook.Name Then
            Set wb = Workbooks.Open(lj & "\" & arr(i) & "\" & f, 0)
            mc = Left(wb.Name, Len(wb.Name) - 4)
            wb.Worksheets(1).Copy after:=ww.Sheets(ww.Sheets.Count)
            ww.Sheets(ww.Sheets.Count).Name = mc
            wb.Close False
        End If
    f = Dir
    Loop
    Set f = Nothing
Next i
Application.ScreenUpdating = False
MsgBox "ok!"
End Sub

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 13:32 , Processed in 0.041936 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表