作者:绿色风
分类:
时间:2022-08-17
浏览:106
楼主 kevinchengcw |
Q: 如何依据指定条件生成对应工作表,并防止相同工作表的再次生成? A: 本例中演示一种利用字典来防止相同条件的工作表二次生成的方法,代码如下:
- Sub test()
- Dim M, N As Long
- Dim Ws, nWs As Worksheet
- Dim Str As String
- Dim Dic
- Set Dic = CreateObject("scripting.dictionary") '创建字典项目
- M = 0 '初始化序号值为0
- Str = ""
- For Each Ws In Worksheets '循环工作簿中各个工作表
- If Left(Ws.Name, 3) = "询证函" And Len(Ws.Name) > 3 Then '如果工作表名的前三个字为“询证函”且表名大于三个字符则(即已生成的工作表)
- Dic.Add Left(Ws.[a3].Value, Len(Ws.[a3].Value) - 2), "" '将相应的单元格内容去除后缀“银行”二字作为字典的key生成对应的字典项
- If Val(Replace(Ws.Name, "询证函", "")) > M Then M = Val(Replace(Ws.Name, "询证函", "")) '将后缀的数字取出最大值赋值给变量
- End If
- Next Ws
- M = M + 1 '将序列号最大值增加1作为新的后缀序列号
- With Worksheets("汇总") '处理汇总页里的对应的数据列
- For N = 9 To .Cells(.Cells.Find("合 计:").Row - 1, 1).End(3).Row '通过查找关键字的方式取得循环的区间范围
- If .Cells(N, 12) = "是" And Not Dic.exists(.Cells(N, 1).Value) Then '如果L列的文本是“是”且字典中不存在对应的A列内容的key(即没有生成过该项的工作表)则
- Worksheets("询证函").Copy after:=Worksheets(Worksheets.Count) '将模板复制一份放到最后
- Set nWs = Worksheets(Worksheets.Count) '将最后的工作表(即新复制的工作表)赋值给工作表变量
- nWs.Name = "询证函" & M '将其依命名规则命名
- M = M + 1 '序列号加1
- Dic.Add nWs.Name, "" '新工作表名加入到字典中
- nWs.[a3] = .Cells(N, 1).Value & "银行" '按要求向新工作表中写入对应数据
- nWs.[e5] = Worksheets("表头").[c4]
- nWs.[d10] = .Cells(N, 2).Value
- End If
- Next N
- End With
- Set Dic = Nothing '清空字典项
- End Sub
利用字典存储已生成的工作表,在生成新的工作表前先判断是否已存在该条件生成的工作表,以此来达到防止二次生成的目的。 具体作用请详见原帖:根据条件生成新的工作表
附示例文件。 生成新的工作表.rar |
2楼 xyf2210 |
好贴 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一