ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何依据指定条件生成对应工作表,并防止相同工作表的再次生成?

如何依据指定条件生成对应工作表,并防止相同工作表的再次生成?

作者:绿色风 分类: 时间:2022-08-17 浏览:81
楼主
kevinchengcw
Q: 如何依据指定条件生成对应工作表,并防止相同工作表的再次生成?
A: 本例中演示一种利用字典来防止相同条件的工作表二次生成的方法,代码如下:
  1. Sub test()
  2. Dim M, N As Long
  3. Dim Ws, nWs As Worksheet
  4. Dim Str As String
  5. Dim Dic
  6. Set Dic = CreateObject("scripting.dictionary")  '创建字典项目
  7. M = 0  '初始化序号值为0
  8. Str = ""
  9. For Each Ws In Worksheets  '循环工作簿中各个工作表
  10.     If Left(Ws.Name, 3) = "询证函" And Len(Ws.Name) > 3 Then  '如果工作表名的前三个字为“询证函”且表名大于三个字符则(即已生成的工作表)
  11.         Dic.Add Left(Ws.[a3].Value, Len(Ws.[a3].Value) - 2), ""   '将相应的单元格内容去除后缀“银行”二字作为字典的key生成对应的字典项
  12.         If Val(Replace(Ws.Name, "询证函", "")) > M Then M = Val(Replace(Ws.Name, "询证函", ""))  '将后缀的数字取出最大值赋值给变量
  13.     End If
  14. Next Ws
  15. M = M + 1  '将序列号最大值增加1作为新的后缀序列号
  16. With Worksheets("汇总")  '处理汇总页里的对应的数据列
  17.     For N = 9 To .Cells(.Cells.Find("合    计:").Row - 1, 1).End(3).Row   '通过查找关键字的方式取得循环的区间范围
  18.         If .Cells(N, 12) = "是" And Not Dic.exists(.Cells(N, 1).Value) Then   '如果L列的文本是“是”且字典中不存在对应的A列内容的key(即没有生成过该项的工作表)则
  19.             Worksheets("询证函").Copy after:=Worksheets(Worksheets.Count)  '将模板复制一份放到最后
  20.             Set nWs = Worksheets(Worksheets.Count)  '将最后的工作表(即新复制的工作表)赋值给工作表变量
  21.             nWs.Name = "询证函" & M   '将其依命名规则命名
  22.             M = M + 1  '序列号加1
  23.             Dic.Add nWs.Name, ""   '新工作表名加入到字典中
  24.             nWs.[a3] = .Cells(N, 1).Value & "银行"   '按要求向新工作表中写入对应数据
  25.             nWs.[e5] = Worksheets("表头").[c4]
  26.             nWs.[d10] = .Cells(N, 2).Value
  27.         End If
  28.     Next N
  29. End With
  30. Set Dic = Nothing  '清空字典项
  31. End Sub


利用字典存储已生成的工作表,在生成新的工作表前先判断是否已存在该条件生成的工作表,以此来达到防止二次生成的目的。
具体作用请详见原帖:根据条件生成新的工作表

附示例文件。
生成新的工作表.rar
2楼
xyf2210
好贴

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap