首页 > 其他分享 >VBA读取 Excel 并按工作表拆分成多个 Excel

VBA读取 Excel 并按工作表拆分成多个 Excel

时间:2024-03-20 09:33:49浏览次数:23  
标签:Dim VBA End Sub MsgBox Excel Exit 表拆 targetSheet

新建窗体

Sub SplitExcelByMonth()

    'On Error GoTo ErrorHandler ' 启用错误处理
    On Error Resume Next
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
     
    Dim exclePath, sourceSheetName, groupSheetName, filterIndexInput, filterIndexNum, saveFolder, filePrefix, columnTemp

    Dim sourceWorkbook As Workbook
    Dim targetWorkbook As Workbook
    Dim filterSheet As Worksheet
    Dim sourceSheet As Worksheet
    Dim targetSheet As Worksheet
    Dim lastRow As Long
    Dim currentValue As String
    Dim targetWorkbookName As String
    
  
    exclePath = txt_exclePath.Text
    If exclePath = "" Then
        MsgBox "请输入文件完整路径"
        Exit Sub
    End If
    If Len(Dir$(exclePath)) = 0 Then
        MsgBox "所输件路径下的文件不存在"
        Exit Sub
    End If
    
    ' 打开源工作簿
    Set sourceWorkbook = Workbooks.Open(exclePath)

    
    groupSheetName = txt_groupSheetName.Text
    If groupSheetName = "" Then
        MsgBox "请输入分组工作簿名称"
        Exit Sub
    End If
    
    Dim sht As Worksheet
    Dim existsSheet As Long
    
    existsSheet = 0
    
    For Each sht In sourceWorkbook.Worksheets
       If sht.Name = groupSheetName Then
         existsSheet = 1
         Exit For
       End If
    Next

    If existsSheet = 0 Then
      MsgBox "分组工作簿名称不存在"
      Exit Sub
    End If
    
    'If Application.WorksheetFunction.CountA(filterSheet) = 0 Then
  
    sourceSheetName = txt_sourceSheetName.Text
    If sourceSheetName = "" Then
        MsgBox "请输入数据源工作簿名称"
        Exit Sub
    End If
    
    existsSheet = 0
    
    For Each sht In sourceWorkbook.Worksheets
       If sht.Name = sourceSheetName Then
         existsSheet = 1
         Exit For
       End If
    Next

    If existsSheet = 0 Then
      MsgBox "数据源工作簿名称不存在"
      Exit Sub
    End If
     
     
    filterIndexInput = txt_filterIndexInput.Text
    If filterIndexInput = "" Then
        MsgBox "请输入数据源工作簿中筛选列的顺序(第几列)"
        Exit Sub
    Else
        filterIndexNum = Int(filterIndexInput)
    End If
    
    Set sourceSheet = sourceWorkbook.Worksheets(sourceSheetName)
    If sourceSheet.Columns.Count < filterIndexNum Then
        MsgBox "数据源工作簿中筛选列的顺序不能大于数据源工作簿的列数"
        Exit Sub
    End If
     
    saveFolder = txt_saveFolder.Text
    If saveFolder = "" Then
        MsgBox "请输入拆分后保存的文件夹路径"
        Exit Sub
    End If
    
    Dim fol
    fol = Dir(saveFolder, vbDirectory)
    If fol = "" Then
        MkDir saveFolder
    End If
 
    filePrefix = txt_filePrefix.Text
    If filePrefix = "" Then
        MsgBox "请输入拆分后保存保存的文件前缀"
        Exit Sub
    End If
 
    
    
    'End '退出应用
       
      
    Set filterSheet = sourceWorkbook.Worksheets(groupSheetName)
    lastRow = filterSheet.Cells(Rows.Count, "A").End(xlUp).Row


    For i = 2 To lastRow
        currentValue = filterSheet.Cells(i, "A").Value
        
        Set targetWorkbook = Workbooks.Add
        Set targetSheet = targetWorkbook.Worksheets(1)
        targetSheet.Name = currentValue
        
         
        sourceSheet.UsedRange.AutoFilter field:=filterIndexNum, Criteria1:=currentValue
         
        sourceSheet.UsedRange.Copy targetSheet.Cells(1, 1)
        
         
        If cb_add_sn.Value = True Then
        
            Dim sourceRange As Range
            Dim targetColumn As Range
            Dim j, rowCount
            
            targetSheet.Columns("A").Insert '新增列
            Set sourceRange = Range("B:B")
            Set targetColumn = Range("A:A")
            sourceRange.Copy '复制第二列
            targetColumn.PasteSpecial xlPasteAll '粘贴到第一列,确保格式
            
            rowCount = targetSheet.Cells(Rows.Count, "A").End(xlUp).Row
            
            targetSheet.Range("A1").Value = "序号"
            For j = 2 To rowCount
                targetSheet.Range("A" & j).Value = j - 1
                targetSheet.Range("A" & j).HorizontalAlignment = xlCenter
                targetSheet.Range("A" & j).VerticalAlignment = xlCenter
            Next j
            
            
            'Do While targetSheet.Range()
        End If
        
        For Each columnTemp In targetSheet.Columns
            columnTemp.AutoFit
        Next
         
        targetWorkbookName = filePrefix & currentValue & ".xlsx"
        targetWorkbook.SaveAs Filename:=(saveFolder & targetWorkbookName)
        targetWorkbook.Close SaveChanges:=True
        Set targetWorkbook = Nothing
    Next i
    
    sourceSheet.UsedRange.AutoFilter
    sourceWorkbook.Close SaveChanges:=False
    Set sourceWorkbook = Nothing
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    MsgBox "拆分完成"
    
'ErrorHandler:

'    MsgBox "发生错误:" & vbCrLf & Err.Description
    
End Sub
View Code
Private Sub comBtn_Click()

     SplitExcelByMonth
     
End Sub
View Code

 

标签:Dim,VBA,End,Sub,MsgBox,Excel,Exit,表拆,targetSheet
From: https://www.cnblogs.com/qq564934147/p/18084474

相关文章

  • Excel/WPS超级处理器,合并单元格汇总3种方式
    在处理职场数据表格,会遇到在合并单元格中汇总求和,计算平均值或统计个数。如何快速被统计汇总呢?接下来,我们就使用超级处理器中的合并单元格汇总菜单来完成这些,鼠标点选即可。超级处理器下载与安装1)合并单元格汇总-求和2)合并单元格汇总-求平均3)合并单元格汇总-计数想......
  • Excel批量生成表单,快速生成多个收款收据工作表
    按照指定的模板,批量生成多个工作表。超级处理器下载及安装以收款收据为例,模板表如下:生成结果表如下:操作步骤讲解如下:Excel批量生成表单,收款收据,鼠标点选就可以完成想了解更多应用,点击关注哦,主页有更多介绍,也可以私信留言。......
  • 在Excel中如何获取汉字拼音首字母?
    在工作中,为了方便查询、排序或者编码,需要生成汉字内容信息的首字母,如果信息很多的话,一个个录入是一件很麻烦的事情,下面给大家介绍一个便捷的方法,轻松获取汉字拼音首字母信息。最终效果如下:一、新建Excel文件新建一个Excel文件,输入示例汉字内容。二、设置【开发工具】菜单【文件】-......
  • 自动化办公:Python如何操控Excel(详细教程)
    1.准备环境Python版本:3.6.5IDE集成开发环境:pycharmPython库选择:openpyxlopenpyxl操作的excel文件以xlsx结尾。openpyxl官网基础命令查看Python版本python--version查看pip版本pip--version安装openxlsxpipinstallopenpyxl-ihttps://pypi.tuna.......
  • post方法下载excel
    main{ByteArrayOutputStreamoutputStream=excelUtil.exportExcel(header,data);//返回文件流给前端StringfileName="fixedSavingExport"+CommUtil.getComputerDate()+".csv";returnResponseEntity.ok().header(HttpHeaders.CONTENT_DISP......
  • Excel新函数TEXTJOIN太强大了,这些高级用法太实用了
    今天跟大家分享WPS中新函数TEXTJOIN的使用方法和技巧,它不仅仅是一个强大的文本连接函数,还有一些高级用法可以帮助我们快速解决日常难题。TEXTJOIN函数介绍作用:TEXTJOIN函数是文本连接函数,使用分隔符连接列表或文本字符串区域。语法:=TEXTJOIN(分隔符,忽略空白单元格,字符串......
  • Java中使用easyexcel导入导出数据
    工作中常常遇到导入导出Excel数据,还需要设置表格边框、合并单元格、字体居中等等各种样式,尝试了多种方式觉得阿里的easyexcel挺好使,记录一下使用、表格样式如下:导入依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId>......
  • EasyExcel实现文件上传下载(百万级数据、单元格自定义样式)
    文章目录一、EasyExcel介绍二、写Excel1、最简单的写2、列宽、行高、背景颜色、字体大小颜色、对齐方式2.1、编码方式2.2、注解方式3、复杂头与修改列顺序4、日期、数字类型和自定义格式化5、设置单元格下拉6、重复多次写入(百万数据)7、导出指定列8、动态生成表头9、模......
  • 读取设置密码保护的excel文件,有没有更好的办法?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【wen】问了一个Python处理Excel加密文件读取问题。问题如下:请教:读取设置了密码保护的exlce文件,df=pd.read_excel(file,password='12345678') 报错:gotanunexpectedkeywordargument"password"  目前的解......
  • Python教程:生成Excel并更改表头
    简介在数据处理和报告生成中,Excel文件是一种常见的格式。Python提供了许多库来处理Excel文件,其中包括openpyxl,它是一个功能强大且易于使用的库,可以用来生成、修改和读取Excel文件。本文将介绍如何使用Python的openpyxl库生成Excel文件,并且演示如何更改表头。生成Excel文件首先......