VBA学习(7):按指定名单批量创建工作表

如下图所示,需要按A列的名单,批量创建工作表。


Sub NewShtBySelection()
    Dim shtAct As Worksheet
    Dim rngData As Range, c As Range
    Dim strName As String
    Dim n As Long, y As Long, strErr As String
    If ActiveWorkbook.ProtectStructure = True Then
        MsgBox "工作簿有保护,无法新建工作表,请先撤除保护。"
        Exit Sub
    End If
    On Error Resume Next '忽略程序错误继续运行
    Set rngData = Application.InputBox("请选择新建工作表名称来源。", _
                                Title:="提示", _
                                Default:=Selection.Address, _
                                Type:=8) '用户选择名称来源区域
    Set rngData = Intersect(rngData, rngData.Parent.UsedRange)
     '交集运算,避免用户选择整列数据造成运算量虚大或选择区域空白
    If rngData Is Nothing Then '如果用户关闭了对话框,或选择区域空白,则退出程序
        MsgBox "未选择有效区域。"
        Exit Sub
    End If
    Set shtAct = ActiveSheet '当前工作表,操作完成后界面回到这里
    With Application '取消屏幕刷新、信息警告、公式重算等
        .ScreenUpdating = False
        .DisplayAlerts = False
        .AskToUpdateLinks = False
        .Calculation = xlCalculationManual
    End With
    For Each c In rngData '遍历名单
        strName = c.Value '工作表名称
        If Len(strName) Then '如果工作表名称非空
            Err.Clear '清除错误
            Worksheets.Add after:=Sheets(Sheets.Count) '新建工作表
            ActiveSheet.Name = strName '命名
            If Err.Number Then '如果存在错误,说明有重名或工作表名称不规范
                ActiveSheet.Delete '删除新建工作表
                n = n + 1 '记录问题名称数量
                strErr = strErr & "," & strName '记录名称
            Else
                y = y + 1 '记录正确创建工作表的数量
            End If
        End If
    Next
    shtAct.Select
    With Application
        .ScreenUpdating = True
        .DisplayAlerts = True
        .AskToUpdateLinks = True
        .Calculation = xlCalculationAutomatic
    End With
    If n Then
        MsgBox "有" & n & "张工作表创建失败,原因是工作表重名或格式错误。" & _
                "名单如下:" & vbCrLf & _
                Mid(strErr, 2)
    ElseIf y Then
        MsgBox "创建完成。"
    End If
End Sub

代码解析见注释,概要总结如下:

第6行至第9行代码判断工作簿是否有保护,如果工作簿有保护是无法创建工作表的,弹窗提示用户并退出程序。

第10行代码忽略程序错误继续运行。
第11行代码使用Application.InputBox语句使用户选择工作表名称的来源单元格区域。第15行代码交集获取有效数据区域。第17行代码判断用户是否点击了对话框的取消按钮或者选择了空白单元格区域。
第21行代码记录当前表,以便程序运行结束后,Excel界面回到当前位置。
第22至第27行代码取消屏幕刷新、公式重算等。
第28至第42行代码遍历名单区域。第32至第33行代码新建工作表并命名。

第34至第40行代码判断错误号,如果存在错误,说明工作表名称不符合Excel要求,包含斜杠等特殊符号,则删除新建的工作表,并记录错误名称。

图片

第50至第56行代码弹窗告知用户工作表创建完成的信息。

技术交流,软件开发,欢迎加微信xwlink1996 


作者其他作品:

下一篇:

上一篇:

VBA实战(Excel)(1):提升运行速度

Ribbon第一节:控件大全

HTML实战(1):新建一个HTML

VB.net实战(VSTO):Excel插件的安装与卸载

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xwLink1996

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值