ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-2-15 15:47 | 显示全部楼层
本帖已被收录到知识树中,索引项:开发帮助和教程
期待版主的新作!

TA的精华主题

TA的得分主题

发表于 2009-2-15 17:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
超强好帖。

TA的精华主题

TA的得分主题

发表于 2009-2-15 17:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
期待楼主能有一些新的实例文件,解说。

TA的精华主题

TA的得分主题

发表于 2009-2-15 18:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-15 19:19 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-15 21:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习,收藏,谢谢版主指导!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-15 21:30 | 显示全部楼层
原帖由 nowarmy 于 2009-2-15 11:52 发表
请问楼主一个问题,如果源区域、目标区域为动态的单元格区域,使用Resize方法确定源区域和目标区域。
请举一个实例。

请参阅技巧技巧8仅复制数值到另一区域中的8-2直接赋值的方法,41楼。

TA的精华主题

TA的得分主题

发表于 2009-2-15 21:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-15 23:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Many thanks. It is really very useful tips.

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-16 00:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

第2部分Worksheet(工作表)对象

技巧25         工作表的添加与删除
       在工作簿中添加工作表使用Add方法,如下面的代码所示。
  1. #001  Sub Addsh()
  2. #002      Dim Sh As Worksheet
  3. #003      With Worksheets
  4. #004          Set Sh = .Add(after:=Worksheets(.Count))
  5. #005          Sh.Name = "数据"
  6. #006      End With
  7. #007  End Sub
复制代码
代码解析:
       Addsh过程使用Add方法在工作簿中新建“数据”工作表。
       第2行代码声明变量Sh为工作表对象。
       第4行行代码使用Add方法在工作簿的最后新建“数据”工作表。
       Add 方法应用于Sheets和Worksheets对象时新建工作表、图表或宏表,语法如下:
expression.Add(Before, After, Count, Type)
       参数Before是可选的,指定工作表对象,新建的工作表将置于此工作表之前。
       参数After是可选的,指定工作表对象,新建的工作表将置于此工作表之后。
       如果Before和 After两者均省略,则新建的工作表将插入到活动工作表之前。
       参数Count可选,要新建的工作表的数目。默认值为 1。
       参数Type可选,指定新建的工作表类型。
       第5行代码将添加的工作表重命名为“数据”。
       如果需要在工作簿中批量添加工作表,可以使用下面的代码。
  1. #001  Sub Addsh_2()
  2. #002      Dim i As Integer
  3. #003      Dim sh As Worksheet
  4. #004      For i = 1 To 10
  5. #005          Set sh = Sheets.Add(after:=Sheets(Sheets.Count))
  6. #006          sh.Name = i
  7. #007      Next
  8. #008  End Sub
复制代码
代码解析:
       Addsh_2过程使用For...Next 语句和Add方法在工作簿中添加10张工作表并将添加的工作表依次重命名。
       在使用以上代码往工作簿中添加工作表时,如果工作簿中已存在相同名称的工作表,运行时会发生错误,代码中断,如图所示。
运行错误1004.jpg
       为了避免此错误的发生,可以在添加前先删除所有的工作表,如下面的代码所示。
  1. #001  Sub Delsh()
  2. #002      Dim sh As Worksheet
  3. #003      For Each sh In ThisWorkbook.Sheets
  4. #004          If sh.Name <> "工作表的添加与删除" Then
  5. #005              Application.DisplayAlerts = False
  6. #006              sh.Delete
  7. #007              Application.DisplayAlerts = True
  8. #008          End If
  9. #009      Next
  10. #010  End Sub
复制代码
代码解析:
        Delsh过程使用Delete方法删除工作簿中除了“工作表的添加与删除”工作表以外所有的工作表。
       第3行代码使用For Each...Next语句遍历代码所在工作簿中所有的工作表。
       第4行到第7行代码判断工作表名称是否为“工作表的添加与删除”,如果不是则使用Delete方法删除。其中第5行代码将Application对象的DisplayAlerts属性设置为False,使删除时不显示如图所示系统警告对话框。
系统警告对话框.jpg
       第6行代码使用Delete方法删除工作表,应用于工作表对象的Delete方法删除指定的对象,语法如下:
expression.Delete
       参数expression是必需的,该表达式返回“应用于”列表中的对象之一。
       在运行添加工作表代码前先删除工作簿中的工作表虽然可以避免同名错误,但也可能误删除有用的工作表,因此更为严谨的方法是在添加前先判断工作簿中是否存在相同名称的工作表,然后再进行下一步的操作。
       对于单张工作表可以使用下面的代码。
  1. #001  Sub Addsh_3()
  2. #002      Dim Sh As Worksheet
  3. #003      For Each Sh In Worksheets
  4. #004          If Sh.Name = "数据" Then
  5. #005              MsgBox "工作簿中已有""数据""工作表,不能重复添加!"
  6. #006              Exit Sub
  7. #007          End If
  8. #008      Next
  9. #009      With Worksheets
  10. #010          Set Sh = .Add(after:=Worksheets(.Count))
  11. #011          Sh.Name = "数据"
  12. #012      End With
  13. #013  End Sub
复制代码
代码解析:
       Addsh_3过程在使用Add方法在工作簿中新建“数据”工作表时首先判断工作簿中是否存在“数据”工作表,如果已存在“数据”工作表则不运行添加工作表的代码而只显示一个消息框进行提示,如图所示。
工作表同名提示.jpg
       还可以使用错误处理语句来绕过错误,如下面的代码所示。
  1. #001  Sub Addsh_4()
  2. #002      Dim sh As Worksheet
  3. #003      On Error GoTo line
  4. #004      With Worksheets
  5. #005          Set sh = .Add(after:=Worksheets(.Count))
  6. #006          sh.Name = "数据"
  7. #007      End With
  8. #008      Exit Sub
  9. #009  line:
  10. #010      MsgBox "工作簿中已有""数据""工作表,不能重复添加!"
  11. #011      Application.DisplayAlerts = False
  12. #012      Worksheets(Worksheets.Count).Delete
  13. #013      Application.DisplayAlerts = True
  14. #014  End Sub
复制代码
代码解析:
       Addsh_4过程是先使用Add方法在工作簿中新建“数据”工作表,如果工作簿中已存在同名的工作表则使用GoTo语句转移到指定的line行处进行提示并删除已添加还没有重命名的工作表,也就是工作簿中最后一张工作表。
       如果是批量添加工作表,使用上述方法时,添加工作表和已有工作表重名时,后面即使没有重名的工作表也不能添加,所以应先使用错误处理语句忽略错误,待全部添加好以后再删除多余的工作表,如下面的代码所示。
  1. #001  Sub Addsh_5()
  2. #002      Dim i As Integer, arr
  3. #003      Dim sh As Worksheet
  4. #004      On Error Resume Next
  5. #005      arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  6. #006      For i = 0 To UBound(arr)
  7. #007          With Worksheets
  8. #008              Set sh = .Add(after:=Sheets(.Count))
  9. #009              sh.Name = arr(i)
  10. #010          End With
  11. #011      Next
  12. #012      Application.DisplayAlerts = False
  13. #013      For Each sh In Worksheets
  14. #014          If sh.Name Like "Sheet*" Then sh.Delete
  15. #015      Next
  16. #016      Application.DisplayAlerts = True
  17. #017  End Sub
复制代码
代码解析:
       Addsh_5过程使用Add方法在工作簿中添加10张工作表并重新命名为1到10,如果工作簿中已有相同名称的工作表则不添加。
       第4行代码错误处理语句,当发生重名错误时忽略错误,继续添加工作表。
       第5行到第11行代码在工作簿中添加10张工作表并重新命名为1到10,如果工作簿中已有相同名称的工作表则忽略重命名时发生的错误,此时工作簿中添加的工作表会以系统赋与的名称命名,如“Sheet1”。
       第12行到第15行代码使用For Each...Next语句遍历工作簿中所有的工作表,将工作簿中凡是以“Sheet”开头的工作表删除。

[ 本帖最后由 yuanzhuping 于 2009-2-16 22:43 编辑 ]

技巧25 工作表的添加与删除.rar

11.29 KB, 下载次数: 2200

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

本版积分规则

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

GMT+8, 2024-11-21 22:02 , Processed in 0.034698 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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