ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-2-17 11:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:开发帮助和教程
呵呵 非常感谢楼主

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

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

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

技巧35         限制工作表的滚动区域
       如果希望限制工作表中滚动的区域,可以通过设置WorkSheet对象的ScrollArea属性来实现。ScrollArea属性使用以A1样式的区域引用形式(字符串类型)返回或设置工作表允许滚动的区域。当设置了工作表滚动区域之后,用户不能选定滚动区域之外的单元格,但仍然可以选定区域之外的其他对象(例如图形、按钮等),同时工作表的一些相应功能可能被禁止(例如工作表全选、选中整行或整列等)。
在VBE中的工程管理窗口选择相应工作表对象,然后在其属性窗口中设置ScrollArea属性,即可限制工作表中滚动的区域,如图所示。
Snap2.jpg
       但是Excel不会记忆该项设置,当再次打开该工作簿时,ScrollArea属性将被重置,用户必须重新设置ScrollArea属性才能限制工作表中的滚动区域,解决方法是使用代码在工作簿打开时对ScrollArea属性进行设置,如下面的代码所示。
  1. #001  Private Sub Workbook_Open()
  2. #002      Sheet1.ScrollArea = "B4:H12"
  3. #003  End Sub
复制代码
代码解析:
       工作簿的Open事件,在打开该工作簿时设置Sheet1工作表的滚动区域为“B4:H12”单元格区域。
       如果需要取消滚动区域的限制,可以将ScrollArea属性值设置为空,如下面的代码所示。
Sheet1.ScrollArea = ""

技巧35 限制工作表的滚动区域.rar

5.52 KB, 下载次数: 2328

TA的精华主题

TA的得分主题

发表于 2009-2-17 17:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-17 20:48 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-17 21:37 | 显示全部楼层

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

技巧36         复制自动筛选后的数据区域
       用户在对如图所示的数据列表进行自动筛选后,往往希望将自动筛选的结果复制到其它地方。
Snap1.jpg
       这时可以通过获取该列表区域中可见单元格的方法得到筛选结果的单元格区域,并复制到工作表Sheet2中,如下面的代码所示。
  1. #001  Sub CopyFilter()
  2. #002      Sheet2.Cells.Clear
  3. #003      With Sheet1
  4. #004          If .FilterMode Then
  5. #005              .AutoFilter.Range.SpecialCells(12).Copy Sheet2.Cells(1, 1)
  6. #006          End If
  7. #007      End With
  8. #008  End Sub
复制代码
代码解析:
       CopyFilter过程将Sheet1表中的筛选结果复制到工作表Sheet2中。
       第2行代码清除Sheet2表中数据。
       第4行代码判断Sheet1表是否处于自动筛选状态。FilterMode属性返回工作表是否处于筛选模式,如果指定工作表中包含已筛选序列且该序列中含有隐藏行,则该值为True。
       第5行代码通过AutoFilter对象的Range属性返回工作表的自动筛选列表区域,再使用SpecialCells方法获取该列表区域中可见单元格(SpecialCells方法请参阅技巧4 ),得到筛选结果的单元格区域,然后使用Copy方法将结果区域复制到工作表Sheet2中,应用于Range对象的Copy方法将单元格区域复制到指定的区域或剪贴板中,语法如下:
expression.Copy(Destination)
            参数expression是必需的,该表达式返回一个Range对象。
       参数Destination是可选的,指定区域要复制到的目标区域。如果省略该参数,则将该区域复制到剪贴板中。
       运行CopyFilter过程工作表Sheet2如图所示。
Snap2.jpg

技巧36 复制自动筛选后的数据区域.rar

11.38 KB, 下载次数: 2420

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-17 21:59 | 显示全部楼层

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

技巧37         使用高级筛选获得不重复记录
       在如图所示的数据列表中,如果要将其中不重复的记录复制到另一工作表中,则可以通过高级筛选功能实现。
Snap3.jpg
       示例代码如下:
  1. #001  Sub Filter()
  2. #002      Sheet1.Range("A1").CurrentRegion.AdvancedFilter _
  3. #003          Action:=xlFilterCopy, Unique:=True, _
  4. #004          CopyToRange:=Sheet2.Range("A1")
  5. #005  End Sub
复制代码
代码解析:
       Filter过程使用AdvancedFilter方法对单元格A1的当前区域筛选不重复的记录,并将筛选结果复制到工作表Sheet2中。应用于Range集合的AdvancedFilter方法语法如下:
AdvancedFilter(Action, CriteriaRange, CopyToRange, Unique)
       参数Action是必需的,可以为表格所列的 XlFilterAction常量之一。
Snap5.jpg
       参数CriteriaRange指定高级筛选操作的条件区域,缺省时表示没有条件限制。
    参数CopyToRange表示指定被复制行的目标区域,仅当Action为xlFilterCopy时有效,否则忽略本参数。
    参数Unique指示是否选择不重复的记录,如果其值为True,则重复出现的记录仅保留一条;如果其值为 False(默认值),则筛选出所有符合条件的记录。
    运行FilterUnique过程,结果如图所示。
Snap4.jpg

技巧37 使用高级筛选获得不重复记录.rar

7.23 KB, 下载次数: 2347

TA的精华主题

TA的得分主题

发表于 2009-2-17 23:46 | 显示全部楼层
yuan版您辛苦了,
每天必学,感觉进步好大
祝您一切顺利!!

TA的精华主题

TA的得分主题

发表于 2009-2-18 20:05 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-18 20:46 | 显示全部楼层

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

技巧38         工作表的保护与解除保护
       在实际应用中,Excel编制的报表、表格、程序等,往往在单元格中设置了公式、函数、自定义格式等,为了防止在使用过程中修改或无意中修改这些设置,一般使用Excel的工作表保护功能来保护这些设置。
       但是程序中可能会使用代码对受保护的工作表进行操作,此时如果没有解除工作表保护,运行出现错误,如图所示。
Snap1.jpg
       解决方法是在运行操作工作表的代码前先使用代码解除工作表保护,待操作完毕后再保护工作表,如下面的代码所示。
  1. #001  Sub ShProtect()
  2. #002      With Sheet1
  3. #003          .Unprotect Password:="12345"
  4. #004          .Cells(1, 1) = 100
  5. #005          .Protect Password:="12345"
  6. #006      End With
  7. #007  End Sub
复制代码
代码解析:
       ShProtect过程在受保护的工作表中对单元格进行操作,其中第3行代码使用Unprotect方法解除工作表的保护。应用于Worksheet 对象的Unprotect方法解除工作表的保护,如果工作表不是受保护的,则此方法不起作用,所以在解除之前无需判断工作表是否受保护,其语法如下:
expression.Unprotect(Password)
       参数expression是必需的,该表达式返回一个Worksheet 对象。
       参数Password是可选的,指定用于解除工作表的保护的密码,此密码是区分大小写的。
       第4、5行代码在单元格录入数据后使用Protect方法重新保护工作表。应用于Worksheet对象的Protect方法保护工作表使其不至被修改,语法如下:
expression.Protect(Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables)
       其中参数expression是必需的,该表达式返回一个Worksheet对象。
       参数Password是可选的,为一个字符串,该字符串为工作表指定区分大小写的密码。
       其他参数都是可选参数,其功能等同于如图所示的工作表保护对话框中的各项选项,具体请参阅VBA帮助。
Snap2.jpg
       如果一个Excel文件使用时间过长,忘记了工作表保护时设置的密码,那么也可以使用VBA解除工作表的保护,代码如下:
  1. #001  Sub RemoveShProtect()
  2. #002      Dim i1 As Integer, i2 As Integer, i3 As Integer
  3. #003      Dim i4 As Integer, i5 As Integer, i6 As Integer
  4. #004      Dim i7 As Integer, i8 As Integer, i9 As Integer
  5. #005      Dim i10 As Integer, i11 As Integer, i12 As Integer
  6. #006      On Error Resume Next
  7. #007      If ActiveSheet.ProtectContents = False Then
  8. #008          MsgBox "该工作表没有保护密码!"
  9. #009          Exit Sub
  10. #010      End If
  11. #011      For i1 = 65 To 66: For i2 = 65 To 66: For i3 = 65 To 66
  12. #012      For i4 = 65 To 66: For i5 = 65 To 66: For i6 = 65 To 66
  13. #013      For i7 = 65 To 66: For i8 = 65 To 66: For i9 = 65 To 66
  14. #014      For i10 = 65 To 66: For i11 = 65 To 66: For i12 = 32 To 126
  15. #015          ActiveSheet.Unprotect Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) _
  16. #016          & Chr(i6) & Chr(i7) & Chr(i8) & Chr(i9) & Chr(i10) & Chr(i11) & Chr(i12)
  17. #017          If ActiveSheet.ProtectContents = False Then
  18. #018              MsgBox "已经解除了工作表保护!"
  19. #019              Exit Sub
  20. #020          End If
  21. #021      Next: Next: Next: Next: Next: Next
  22. #022      Next: Next: Next: Next: Next: Next
  23. #023  End Sub
复制代码
代码解析:
       RemoveShProtect过程解除工作表的保护。
       其中第7行到第10行代码判断工作表是否受保护,ProtectContents属性返回工作表的保护状态,如果工作表的内容处于保护状态,则该值为True。
       第11行到第22行代码使用For...Next 语句和Chr函数来返回指定字符码所代表的字符串组合不断地尝试解除工作表保护,一旦工作表的ProtectContents属性返回False说明已经解除工作表保护。

[ 本帖最后由 yuanzhuping 于 2009-2-19 07:52 编辑 ]

技巧38 工作表的保护与解除保护.rar

8.42 KB, 下载次数: 2279

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

本版积分规则

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

GMT+8, 2024-11-25 13:01 , Processed in 0.049460 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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