ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: 武松打鼓

[求助] 拆分到新工作簿里

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-12-16 12:38 | 显示全部楼层
武松打鼓 发表于 2025-12-16 11:13
要把拆分的表保存在一个新工作簿里,不要在原工作簿里。

改好了。。。

拆分251215.zip

991.2 KB, 下载次数: 7

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2025-12-16 12:39 | 显示全部楼层
  1. Sub ykcbf()   '2025.12.16
  2.     ApplicationSettings False
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     p = ThisWorkbook.Path & Application.PathSeparator
  5.     With Application.FileDialog(msoFileDialogFilePicker)
  6.         .InitialFileName = ThisWorkbook.Path & ""
  7.         .Title = "请选择对应Excel文件"
  8.         .AllowMultiSelect = False
  9.         .Filters.Clear
  10.         .Filters.Add "Excel文件", "*.xls*"
  11.         If .Show Then f = .SelectedItems(1) Else Exit Sub
  12.     End With
  13.     bt = Val(Application.InputBox("请输入标题行数:默认是1行", "标题行数", 1))
  14.     col = Val(Application.InputBox("请输入拆分列列号:默认是8列", "拆分依据列列号", 8))
  15.     If col = 0 Or bt = 0 Then Exit Sub
  16.     tm = Timer
  17.     Set wb = Workbooks.Open(f, 0)
  18.     wb.Sheets(1).Copy
  19.     Set wb1 = ActiveWorkbook
  20.     Set sh = wb1.Sheets(1)
  21.     wb.Close False
  22.     With sh
  23.         r = .Cells(.Rows.Count, col).End(xlUp).Row
  24.         c = .Cells(bt, Columns.Count).End(xlToLeft).Column
  25.         arr = .[A1].Resize(r, c).Value
  26.     End With
  27.     For i = bt + 1 To UBound(arr, 1)
  28.         If Len(arr(i, col) & "") > 0 Then
  29.             s = arr(i, col)
  30.             If Not d.Exists(s) Then d(s) = True
  31.         End If
  32.     Next i
  33.     For Each k In d.Keys
  34.         sh.Copy After:=wb1.Sheets(wb1.Sheets.Count)
  35.         With wb1.Sheets(wb1.Sheets.Count)
  36.             .DrawingObjects.Delete
  37.             .Name = CStr(k)
  38.             .Rows(bt).AutoFilter col, "<>" & k
  39.             .Rows(bt + 1 & ":" & r).Delete
  40.             .AutoFilterMode = False
  41.         End With
  42.     Next
  43.     sh.Activate
  44.     wb1.SaveAs p & "工作簿另存.xlsx", 51
  45.     wb1.Close False
  46.     ApplicationSettings True
  47.     If d.Count > 0 Then
  48.         MsgBox "■ 拆分操作完成 ■" & vbCrLf & _
  49.             "═══════════════════════" & vbCrLf & _
  50.             "■ 处理时间: " & Format(Timer - tm, "0.000") & "秒" & vbCrLf & _
  51.             "■ 处理行数: " & UBound(arr) - bt & "行" & vbCrLf & _
  52.             "■ 生成表数: " & d.Count & "个" & vbCrLf & _
  53.             "═══════════════════════", vbInformation, "执行报告"
  54.     End If
  55. End Sub

  56. Private Sub ApplicationSettings(ByVal Reset As Boolean)
  57.     With Application
  58.         .ScreenUpdating = Reset
  59.         .DisplayAlerts = Reset
  60.         .Calculation = IIf(Reset, xlCalculationAutomatic, xlCalculationManual)
  61.         .AskToUpdateLinks = Reset
  62.         .EnableEvents = Reset
  63.     End With
  64. End Sub
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-12-16 14:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liulang0808 发表于 2025-12-16 11:24
原来代码基础上调整了,看看是否可行

希望拆分成的新表都在一个工作簿里-1簿多表而不是1簿1表

TA的精华主题

TA的得分主题

发表于 2025-12-16 16:01 | 显示全部楼层
。。。。。。。。。。。。

拆分251215 (1).zip

776.86 KB, 下载次数: 6

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-12-17 08:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liulang0808 发表于 2025-12-16 16:01
。。。。。。。。。。。。

运行后在弹出的窗口里,如果不输内容点击取消,出现弹窗错误,怎么解决


01.png

02.png

TA的精华主题

TA的得分主题

发表于 2025-12-17 09:10 | 显示全部楼层
武松打鼓 发表于 2025-12-17 08:51
运行后在弹出的窗口里,如果不输内容点击取消,出现弹窗错误,怎么解决

这个是楼主源代码就有的功能,不选择,按照哪一列拆分呢?
现在改了,不选择,退出程序。

拆分251215.zip

776.6 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2025-12-17 15:22 | 显示全部楼层
    Sub 导出文件()
        
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Dim ws As Worksheet, nw As Workbook, wb As Workbook
        Dim savePath As String
        
        ' 获取当前工作簿路径
        savePath = ThisWorkbook.Path & "\"
        
        Set wb = ThisWorkbook
        ' 创建新工作簿
        Set nw = Workbooks.Add(xlWBATWorksheet)
        For Each sht In wb.Sheets
            If sht.Name <> "数据源" Then
                sht.Move after:=nw.Sheets(nw.Sheets.Count)
            End If
        Next
        ' 删除新工作簿中自动生成的空白工作表
        nw.Sheets("Sheet1").Delete
        
        ' 保存新文件并关闭
        nw.SaveAs Filename:=savePath & "拆分表" & ".xlsx", FileFormat:=xlOpenXMLWorkbook
        nw.Close SaveChanges:=False
        
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
        MsgBox "导出成功!"
        
    End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-12-17 18:59 , Processed in 0.030806 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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