VBA判断Excel是否存在指定名字的表格,没有则新增

一、前言

本文写的是两个Excel常用的辅助VBA工具函数类,一是通过遍历Excel已有所有表名,判断是否存在指定名字的表格;二是如果不存在指定名字的表格,则新建该名字的表格,通常是后续写入数据。后面有些文章可能会直接使用这些函数,就不再重复写出来了。

注意:1.技术上没有什么难点。注意事项、写代码时思考的痕迹和说明都已经写在代码注释部分了,正文不再赘述。2.在Word等VBA环境下可能需要稍作调整才不会报错,比如有些Excel专有对象需要声明。参数里es本质是ExcelSheets对象,sh是ExcelSheet对象。表名为字符串类型,需要使用ByVal,否则函数内部如果有修改(比如转换大小写)会对传入的数据后续使用有影响。

二、判断Excel是否已存在指定名字的表格

'遍历Excel表格判断是否存在指定名称的表格。
Private Function IsExistSheetName(es As Variant, ByVal strSheetName As String) As Boolean
    If (Len(strSheetName) = 0) Then
        '注意:如不判断处理,可能导致后续代码死循环。
        '处理方式是直接抛出错误,因为是程序级错误,需要程序员优化代码。
        IsExistSheetName = False
'Excel自带错误异常提示说明:
'在重命名工作表时输入的名称无效?请尝试以下操作:
'· 确认输入的名称不多于31个字符?
'· 确认名称中不包含以下字符:  : \ / ? * [ 或 ]。
'· 确认名称的第一个或者最后一个字符不能是单引号?
'· 确认工作表名称不为空?
        Err.Raise Number:=(vbObjectError + 1000), Description:="用户错误Function IsExistSheetName:Sheet名为空字符串。请检查。"
        Exit Function
    End If
    Dim isExist As Boolean
    isExist = False

    Dim sh As Variant
    For Each sh In es
        '注意:字符串比较前要全部转为相同大小写,否则表名有英文字符可能因为大小学不同不相等。
        '或者换用不分大小写判断字符串是否相等的专用函数。
        If (UCase(sh.Name) = UCase(strSheetName)) Then
            isExist = True
            Exit For
        End If
    Next
    IsExistSheetName = isExist
End Function

三、新建指定名字的表格

'如果没有指定名字的表格,新建之。
Private Sub NewSheetIfNotExist(es As Variant, ByVal strSheetName As String)
    If (IsExistSheetName(es, strSheetName) = False) Then
        'es.Add after:=Excel.ActiveSheet '新增在当前表格后
        es.Add After:=es(es.Count)     '新增表格在最后
        es(es.Count).Name = strSheetName
    End If
    'es(strSheetName).Select '切换到新建表格
    '注意:如果不存在指定名字的表格,Worksheets("表名") Is Nothing直接引用会提示索引错误。
    es(strSheetName).Cells.ClearContents       '清空数据,和新表一样。注意,格式仍存在。
    '无需返回值,后续获取表对象即可。
End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值