ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖

[求助] 请大佬帮忙写根据条件创建或删除工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-17 12:31 | 显示全部楼层
名可名非恒名 发表于 2024-8-17 12:30
大佬,我除了新员工名单,老员工,不能删1,不能删2,不能删3,这些工作表不能删以外,但是后期会增加表格, ...

有一个方法:把不能删除的工作表名称放在新员工名单里面

TA的精华主题

TA的得分主题

发表于 2024-8-17 12:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-17 12:41 | 显示全部楼层
Private Sub Workbook_Open()
Application.DisplayAlerts = False
Dim arr, i, dic As Object, sht As Worksheet
arr = Sheet1.Range("a1").CurrentRegion.Value
Set dic = CreateObject("scripting.dictionary")
Set dic2 = CreateObject("scripting.dictionary")
For Each sht In Sheets
    dic(sht.Name) = ""
Next
For i = 2 To UBound(arr)
    s = arr(i, 1)
    If s <> Empty Then
    If Not dic.exists(s) Then
        Sheet2.Copy after:=Sheets(Sheets.Count)
        ActiveSheet.Name = arr(i, 1)
    End If
    End If
    dic2(s) = ""
Next
For j = Sheets.Count To 5 Step -1
    If Not dic2.exists(Sheets(j).Name) Then
        Sheets(j).Delete
    End If
Next
Application.DisplayAlerts = True
Set dic = Nothing: Set dic2 = Nothing
Set sht = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2024-8-17 12:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-17 12:45 | 显示全部楼层
试试............

请大佬帮助.rar

29.72 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2024-8-17 13:59 | 显示全部楼层
  1. Sub test()
  2.     Dim sht As Worksheet
  3.     Dim FindSht As Boolean
  4.     Dim MyRow%
  5.     MyRow = Sheets("新员工名单").[a1].End(xlDown).Row
  6.    
  7.     '添加新来的
  8.     For i = 2 To MyRow
  9.         FindSht = False
  10.         For Each sht In Sheets
  11.             If sht.Name = Sheets("新员工名单").Cells(i, 1).Value Then FindSht = True
  12.         Next
  13.         
  14.         If Not FindSht Then
  15.             Sheets("老员工").Copy after:=Sheets(Sheets.Count)
  16.             Set sht = Sheets(Sheets.Count)
  17.             sht.Name = Sheets("新员工名单").Cells(i, 1).Value
  18.         End If
  19.     Next
  20.    
  21.     '删除不在的
  22.     Dim arrTmp() As String
  23.    
  24.     For i = Sheets.Count To 1 Step -1
  25.         'Debug.Print sht.Name
  26.         FindSht = False
  27.         For j = 2 To MyRow
  28.             If Sheets(i).Name = Sheets("新员工名单").Cells(j, 1).Value Then FindSht = True
  29.         Next
  30.         
  31.         If Not FindSht Then  '如果扫描一遍员工名单没发现工作表名字在其中
  32.                              '就进一步检查此工作表名字是否在不能删的工作表名字中
  33.             arrTmp = Filter(Array("新员工名单", "老员工", "不能删1", "不能删2", "不能删3"), Sheets(i).Name)
  34.             Application.DisplayAlerts = False
  35.             If UBound(arrTmp) = -1 Then Sheets(i).Delete    '如果是空数组,说明此表可删
  36.             Application.DisplayAlerts = True
  37.         End If
  38.     Next
  39.    
  40.     MsgBox "OK"
  41. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2024-8-17 14:01 | 显示全部楼层
本帖最后由 jaxxcyh 于 2024-8-17 14:11 编辑

不能删的表名字可以在33行写到数组里,或者放在新员工名单最前面,不影响后续增减名单

增减员工工作表.zip

25.69 KB, 下载次数: 4

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 14:42 , Processed in 0.041238 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表