ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3277|回复: 22

[已解决] VB编辑中每次自动生成几个sheet

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-3-14 21:13 | 显示全部楼层 |阅读模式
本帖最后由 ①然如故 于 2019-3-17 22:48 编辑

问题解决了,在ThisWorkbook 添加 删除,验证下拉菜单单元格。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Sheet3.[b2:h2].Validation.Delete  
    Sheet3.[b3:h3].Validation.Delete   
End Sub
在此要特别感谢lsc900707的
耐心帮助
,以及chxw68,maditate两位老师。


求高手赐教,工作簿VB编辑器中多了几个sheet及工作表中的格式被自动清除,符上附件供测试。 VB多了sheet.rar (1.41 MB, 下载次数: 13)
打开时
3333.jpg

1111.jpg

2222.jpg



TA的精华主题

TA的得分主题

发表于 2019-3-14 21:36 | 显示全部楼层
可能误操作了吧,选定有用的工作表另存工作簿试试。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-14 21:58 | 显示全部楼层
lsc900707 发表于 2019-3-14 21:36
可能误操作了吧,选定有用的工作表另存工作簿试试。

lsc900707您好,我已尝试过另存为,还是没用的,请您帮查看是否VBA代码有问题,谢谢!

TA的精华主题

TA的得分主题

发表于 2019-3-14 22:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
①然如故 发表于 2019-3-14 21:58
lsc900707您好,我已尝试过另存为,还是没用的,请您帮查看是否VBA代码有问题,谢谢!

哪几个是多的呢?原来就有sheet6吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-14 22:27 | 显示全部楼层
本帖最后由 ①然如故 于 2019-3-14 22:36 编辑
lsc900707 发表于 2019-3-14 22:20
哪几个是多的呢?原来就有sheet6吗?

lsc900707你好,原来只有5个表,见图
4444.jpg
表名称栏也只显示5个,VB编辑器中每次打开在关闭都会成倍生成sheet.
VBA代码是用在“小单位汇总”
  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     If Target.Address <> "$B$2" And Target.Address <> "$B$3" Then Exit Sub 'And Target.Address <> "$B$4" Then Exit Sub
  4.     Rem  ?????к??к?
  5.     Dim C As Object, d As Object, Rng As Range, ss$, n%
  6.     Set C = CreateObject("scripting.dictionary")
  7.     Set d = CreateObject("scripting.dictionary")
  8.     For Each Rng In Range("B4:Q4")   '???????
  9.         n = n + 1
  10.         If Rng.Value <> "" Then ss = Rng.Value
  11.         C(ss & Rng.Offset(1, 0).Value) = n
  12.     Next

  13.     Rem ????????????
  14.     Dim arr, i&, a(), x%, y%
  15.     Dim key1$: key1 = Range("B2") & "*"  '??λ
  16.     Dim key2$: key2 = Range("B3") & "*"  'С??λ
  17. '    Dim key3$: key3 = Range("B4") & "*"  '????
  18.     n = 0
  19.     arr = Sheets("数据源").Range("A1").CurrentRegion
  20.     For i = 2 To UBound(arr)
  21.         If arr(i, 3) Like key1 And arr(i, 4) Like key2 Then  'And arr(i, 6) Like key3 Then  '??λ??С??λ??????
  22.             x = C.Item(arr(i, 1) & arr(i, 11))   '????
  23.             If Not d.Exists(arr(i, 9)) Then   '???μ?
  24.                 n = n + 1: y = n
  25.                 ReDim Preserve a(1 To 16, 1 To n)
  26.                 d(arr(i, 9)) = n   '???μ?
  27.             Else
  28.                 y = d.Item(arr(i, 9))   '???μ?
  29.             End If
  30.             a(x, y) = a(x, y) + arr(i, 10)   '????
  31.         End If
  32.     Next

  33.     Rem ?????????
  34.     Sheet3.Select
  35.     Application.ScreenUpdating = False
  36.     Range("A6:N500").ClearContents
  37.     Range("A6:N500").Borders.LineStyle = xlNone
  38.     If n > 0 Then
  39.         With Range("A6")
  40.             .Resize(d.Count, 1) = WorksheetFunction.Transpose(d.keys)
  41.             .Resize(d.Count + 1, 14).Font.Bold = False
  42.             .Offset(d.Count, 0) = "???"
  43.             .Offset(0, 13).Resize(d.Count, 1).FormulaR1C1 = "=SUM(RC2:RC13)"
  44.             .Offset(0, 13).Resize(d.Count, 1).Font.Bold = True
  45.             .Resize(d.Count + 1, 14).Borders.LineStyle = xlContinuous
  46.         End With
  47.         With Range("B6")
  48.             .Resize(n, 12) = WorksheetFunction.Transpose(a)
  49.             .Offset(n, 0).Resize(1, 13).FormulaR1C1 = "=SUM(R6C:R" & d.Count + 5 & "C)"
  50.             .Offset(n, -1).Resize(1, 14).Font.Bold = True
  51.         End With
  52.     End If
  53.     Application.ScreenUpdating = True
  54. End Sub

  55. Private Sub Worksheet_SelectionChange(ByVal Target As Range) '???????????
  56.     On Error Resume Next
  57.     If Target.Address <> "$B$2:$K$2" And Target.Address <> "$B$3:$K$3" Then Exit Sub 'And Target.Address <> "$B$4:$I$4" Then Exit Sub
  58.     Dim arr, d As Object, i&, x$
  59.     Set d = CreateObject("scripting.dictionary")
  60.     arr = Sheets("数据源").[a1].CurrentRegion
  61.     For i = 2 To UBound(arr)
  62.         x = arr(i, 3)
  63.         If Not d.Exists(x) Then
  64.             Set d(x) = CreateObject("Scripting.Dictionary")
  65.             d(x)(arr(i, 4) & "") = arr(i, 5)
  66.         ElseIf InStr("," & d(x)(arr(i, 4) & "") & ",", "," & arr(i, 5) & ",") = 0 Then
  67.             d(x)(arr(i, 4) & "") = d(x)(arr(i, 4) & "") & "," & arr(i, 5)
  68.         End If
  69.     Next
  70.     Sheet3.Unprotect
  71.     With Target.Validation
  72.         .Delete
  73.         Select Case Target.Address
  74.             Case "$B$2:$K$2"
  75.                 .Add xlValidateList, , , Join(d.keys, ",")
  76.                 [b3] = ""
  77.             Case "$B$3:$K$3"
  78.                 .Add xlValidateList, , , Join(d([B2].Value).keys, ",")
  79. '                [b4] = ""
  80. '            Case "$B$4:$I$4"
  81. '                .Add xlValidateList, , , d([B2].Value)([b3].Value)
  82.         End Select
  83.     End With
  84.     Sheet3.Protect UserInterfaceOnly:=True
  85. End Sub

复制代码



TA的精华主题

TA的得分主题

发表于 2019-3-14 22:31 | 显示全部楼层
①然如故 发表于 2019-3-14 22:27
lsc900707你好,原来只有5个表,见图

表名称栏也只显示5个,VB编辑器中每次打开在关闭都会成倍生成she ...

你用的是工作表事件,那代码就要贴在相应的工作表代码区。你贴好后再试试。

TA的精华主题

TA的得分主题

发表于 2019-3-14 22:39 | 显示全部楼层
①然如故 发表于 2019-3-14 22:27
lsc900707你好,原来只有5个表,见图

表名称栏也只显示5个,VB编辑器中每次打开在关闭都会成倍生成she ...

回复在审核,你测试附件看看吧:

VB多了sheet.rar

1.35 MB, 下载次数: 3

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-3-14 22:40 | 显示全部楼层
①然如故 发表于 2019-3-14 22:27
lsc900707你好,原来只有5个表,见图

表名称栏也只显示5个,VB编辑器中每次打开在关闭都会成倍生成she ...

代码贴错地方了。。。。。。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-3-14 22:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lsc900707 发表于 2019-3-14 22:40
代码贴错地方了。。。。。。

lsc900707您好,不是代码放错地方,我也是看“小单位汇总”在哪个sheet就放哪里,请你运行代码然后保存再打开就会出现我描述的情况。
555.jpg

TA的精华主题

TA的得分主题

发表于 2019-3-14 22:57 | 显示全部楼层
①然如故 发表于 2019-3-14 22:53
lsc900707您好,不是代码放错地方,我也是看“小单位汇总”在哪个sheet就放哪里,请你运行代码然后保存再 ...

那就证明代码有问题了,有时间我再看看吧。

评分

1

查看全部评分

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

本版积分规则

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

GMT+8, 2024-4-27 00:49 , Processed in 0.048713 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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