Excel合并工作簿的第一个sheet,并按照工作簿命名sheet

需求:可以将多个工作簿的第一个sheet合并到一个工作簿中,并且每一个sheet的名字用工作簿来命名。

Sub 合并工作簿sheet()
    sPath = Excel.ThisWorkbook.Path
    Set x = Application.FileDialog(msoFileDialogFilePicker)
    Application.ScreenUpdating = False
    With x
        .AllowMultiSelect = True
        '.ButtonName = "请选择"
        '.Title = "xxx"
        .InitialFileName = sPath
        If .Show = 0 Then Exit Sub
        Application.ScreenUpdating = False
        For Each file In .SelectedItems
            Filename = split0(file, -1, "\")
            Set 原始表 = Workbooks.Open(file)
            原始表.Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
            原始表.Close savechanges:=False
            'ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Replace(file.Name, "")
            For Each 符号 In Array("""", "*", "<", ">", "?", "\", "/", "|", ":", "[", "]", ".xlsx", ".xls")
                If InStr(Filename, 符号) Then
                    Filename = Replace(Filename, 符号, "")
                End If
            Next
            ThisWorkbook.ActiveSheet.Name = Left(Filename, 30)
        Next
    End With
    Application.ScreenUpdating = True
End Sub
Function split0(单元格, 第几个字段, Optional 可选分隔符)
    y = 单元格
    If IsMissing(可选分隔符) Then
        x = Split(y, " ")
    Else
        x = Split(y, 可选分隔符)
    End If
    For i = 0 To UBound(x)
        If x(i) <> "" Then
            j = j + 1
        End If
    Next
    Dim brr() As String
    ReDim brr(1 To j)
    j = 0
    For i = 0 To UBound(x)
        If x(i) <> "" Then
            j = j + 1
            brr(j) = x(i)
        End If
    Next
    If 第几个字段 < 0 Then
        第几个字段 = UBound(brr) + 第几个字段 + 1
    End If
    split0 = Trim(brr(第几个字段))
End Function

注意点:

1、Application.FileDialog(msoFileDialogFilePicker) 可以多选文件,并且可以设置打开时的初始路径,比较好用

2、重新改造了split函数,可以获取倒数第一个值,就是文件名

3、对于文件名中的特殊符号以及后缀,要舍去,我用数组循环遍历删除

4、ThisWorkbook.ActiveSheet.Name = Left(Filename, 30)     一定要用activesheet 不然这个表格在多次使用时,名称可能没改掉。原理:每次sheet新增时,表格都会新增sheet索引,如果删除了表格,索引也不会减少,和实际的sheet.cout不一致,所以sheets(n) 这种方式无法选择到正在被增加的sheet,每次sheet增加时,被增加的都会变成activesheet,所以用这个来设置名称,不会出错

5、用Application.ScreenUpdating 控制屏幕刷新的动画,可以加快速度

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值