使用vba把一个工作簿的多个sheet拆分成两个sheet为一个工作簿的多个工作簿

假如一个工作簿有10个sheet,一下代码就是把10个sheet拆分成两个工作簿,一个工作簿有2个sheet,并且包含原sheet的数据

Sub SplitWorksheet()
'定义对话框变量
Dim cc As FileDialog
Set cc = Application.FileDialog(msoFileDialogFilePicker)
Dim newwork As Workbook
Dim num As Integer
With cc
    If .Show = -1 Then
        Dim vrtSelectedItem As Variant
        For Each vrtSelectedItem In .SelectedItems
            Dim tempwb As Workbook
            Set tempwb = Workbooks.Open(vrtSelectedItem)
            
            '获取需拆分文件的工作表数量
            num = tempwb.Sheets.Count
            '获取需拆分文件的路径
            ipath = tempwb.Path & "\"
            
            For i = 1 To num
                
                '如果对2取余为0,执行以下代码
                If (i Mod 2 = 0) Then
                    
                    Set sht = Worksheets(i - 1)
                    '新建一个新的工作簿
                    Set newwork = Workbooks.Add
                    
                    '把需拆分的第一个工作簿的奇数工作表工作表复制到第二个工作簿的第一个sheet
                    tempwb.Worksheets(i - 1).Copy before:=newwork.Worksheets(1)
                    '把需拆分的第一个工作簿的偶数工作表工作表复制到第二个工作簿的第一个sheet
                    tempwb.Worksheets(i).Copy before:=newwork.Worksheets(2)
                    
                    '不知道什么原因,第一个工作簿的sheet会出现一点小问题,没有具体调查
                    '只是使用了一个方法去解决
                    
                    '把第三个sheet名修改成别的名字
                    '第一个sheet名需取拆分文件的第一个sheet名
                    If (i <= 2) Then
                        Worksheets(3).Name = "sheet3"
                        Worksheets(1).Name = sht.Name
                    End If

                    
                    '关闭弹框
                    Application.DisplayAlerts = Fals
                    
                    '保存文件到某个路径,和文件名 xlsx格式 加上下面注释的,True为xls格式
                    
                    ActiveWorkbook.SaveAs ipath & sht.Name ',True
                    
                    '删除第三个sheet
                    Sheets(newwork.Worksheets(3).Name).Delete
                    
                    '关闭指定工作簿
                    Workbooks(newwork.Name).Close savechanges:=True
                End If
            Next i
            tempwb.Close savechanges:=False
            MsgBox "工作表已拆分完毕到  " & ipath & "    路径下,请确认!"
        Next vrtSelectedItem
    End If
End With
Set cc = Nothing

End Sub

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值