ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 字典方法添加Sheet

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-23 21:38 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
image.png



  1. Sub deldel()
  2.     Dim Sht As Worksheet
  3.         Set Sht = DictAddSheet(ThisWorkbook, "A1")
  4.         Debug.Print Sht.Name
  5.         Set Sht = ForEachAddSheet(ThisWorkbook, "A2")
  6.         Debug.Print Sht.Name
  7. End Sub

  8. Function DictAddSheet(Wk As Workbook, Str)
  9.    Dim Dict As Dictionary
  10.        Set Dict = New Dictionary
  11.    Dim Sht As Worksheet
  12.      For Each Sht In Wk.Sheets
  13.          Dict(Sht.Name) = ""
  14.      Next Sht
  15.      If Not Dict.Exists(Str) Then
  16.           Set AddSheet = Sheets.Add(After:=Worksheets(Worksheets.Count))
  17.           AddSheet.Name = Str
  18.      Else
  19.           Set DictAddSheet = Sheets(Str)
  20.      End If
  21. End Function

  22. Function ForEachAddSheet(Wk As Workbook, Str)
  23.    Dim Sht As Worksheet
  24.      For Each Sht In Wk.Sheets
  25.         If Sht.Name = Str Then
  26.             Set ForEachAddSheet = Sht
  27.             Exit Function
  28.         End If
  29.      Next Sht
  30.      
  31.      Set ForEachAddSheet = Sheets.Add(After:=Worksheets(Worksheets.Count))
  32.      ForEachAddSheet.Name = Str
  33. End Function
复制代码


TA的精华主题

TA的得分主题

发表于 2024-8-24 09:21 | 显示全部楼层
  1. Sub deldel()
  2. Dim Sht As Worksheet
  3. Set Sht = DictAddSheet(ThisWorkbook, "A1")
  4. Debug.Print Sht.Name
  5. Set Sht = ForEachAddSheet(ThisWorkbook, "A2")
  6. Debug.Print Sht.Name
  7. End Sub

  8. Function DictAddSheet(Wk As Workbook, Str)
  9. Dim Dict As Dictionary
  10. Set Dict = New Dictionary
  11. Dim Sht As Worksheet
  12. For Each Sht In Wk.Sheets
  13.   Dict(Sht.Name) = ""
  14. Next Sht
  15. If Not Dict.Exists(Str) Then '用输出的工作表变量名
  16.   Set DictAddSheet = Sheets.Add(After:=Worksheets(Worksheets.Count))
  17.   DictAddSheet.Name = Str
  18. Else
  19.   Set DictAddSheet = Sheets(Str)
  20. End If
  21. End Function

  22. Function ForEachAddSheet(Wk As Workbook, Str)
  23. Dim Sht As Worksheet
  24. For Each Sht In Wk.Sheets
  25.   If Sht.Name = Str Then
  26.    Set ForEachAddSheet = Sht
  27.    Exit Function
  28.   End If
  29. Next Sht

  30. Set ForEachAddSheet = Sheets.Add(After:=Worksheets(Worksheets.Count))
  31. ForEachAddSheet.Name = Str
  32. End Function
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-7 19:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

学习学习,在学习


  1. Function AddSheet(Wk As Workbook, Str)
  2.    Dim Sht As Worksheet
  3.      For Each Sht In Wk.Sheets
  4.         If Sht.Name = Str Then
  5.             Set AddSheet = Sht
  6.             Exit Function
  7.         End If
  8.      Next Sht
  9.      
  10.      Set AddSheet = Sheets.Add(After:=Worksheets(Worksheets.Count))
  11.      AddSheet.Name = Str
  12. End Function

  13. Sub SelectFolderChangeSheet()
  14.    Dim Sht As Worksheet, Rng As Range, Kk
  15.    Dim BaseRow
  16.       
  17.    Dim Fso As FileSystemObject, oFile As File
  18.        Set Fso = New FileSystemObject
  19.    Dim oFolder As Folder
  20.    Dim Ff As FileDialog
  21.    Set Ff = Application.FileDialog(msoFileDialogFolderPicker)
  22.    With Ff
  23.       .Title = ""
  24.       .AllowMultiSelect = True
  25.       .InitialFileName = "F:"
  26.       .Show
  27.       Set oFolder = Fso.GetFolder(.SelectedItems(1))
  28.    End With
  29.    Debug.Print oFolder.Name
  30.    Set Sht = AddSheet(ThisWorkbook, oFolder.Name)
  31.    BaseRow = 10
  32.    Kk = BaseRow
  33.    
  34.    For Each oFile In oFolder.Files
  35.         Sht.Cells(Kk, "A") = Sht.Cells(Kk, 1).Row - BaseRow + 1
  36.         
  37.         Sht.Cells(Kk, "B") = oFile.DateLastModified
  38.         Sht.Cells(Kk, "C") = oFile.Name
  39.         Sht.Cells(Kk, "D") = Round(oFile.Size / 1024 ^ 2, 1)
  40.         'Rng(Kk, 2) = oFile.Path
  41.         Kk = Kk + 1
  42.    Next oFile
  43.    
  44.    
  45. End Sub ''
复制代码

TA的精华主题

TA的得分主题

发表于 2024-12-8 09:22 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-25 10:04 | 显示全部楼层

谢谢指点,因为我的代码很短,不愿意用 On Error Resume Next.\直接找到错误点。


但是学习到 Sht iIs nothing 的用法。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-2-19 07:15 , Processed in 0.021046 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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