ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

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

第1部分Range(单元格)对象

本帖已被收录到知识树中,索引项:开发帮助和教程
技巧17         双击被保护单元格时不显示提示消息框
       当用户使用鼠标左键双击被保护工作表中锁定的单元格区域时,系统将显示如图所示的消息框。
系统提示消息框.jpg
       如果不希望显示该消息框,可以在工作表Worksheet_BeforeDoubleClick事件中进行设置,如下面的代码所示。
  1. #001  Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  2. #002      If Target.Locked = True Then
  3. #003          MsgBox "此单元格已保护,不能编辑!"
  4. #004          Cancel = True
  5. #005      End If
  6. #006  End Sub
复制代码
代码解析:
       当用户使用鼠标左键双击工作表单元格时,触发Worksheet_BeforeDoubleClick事件。该事件中的Target参数代表用户双击鼠标左键的单元格区域。
       参数Cancel设置是否取消该操作。如果将参数Cancel设置为True,将不进行默认的双击操作。
       第2行代码中判断用户双击鼠标左键的单元格区域是否已锁定(Range对象的Locked属性返回或设置Range对象是否锁定),如果单元格区域已锁定,则设置参数Cancel设置为True,不进行默认的双击操作,因而不再显示上图所示的提示的消息框,只显示一个自定义的提示信息,如图所示。
自定义提示信息.jpg

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

技巧17 双击被保护单元格时不显示提示消息框.rar

5.5 KB, 下载次数: 3234

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-12 19:49 | 显示全部楼层

第1部分Range(单元格)对象

技巧18         重新计算工作表指定区域
       如果在工作表中含有大量公式,那么在对工作表执行重新计算操作时,可能需要较长的时间。在实际工作中,有时希望仅对指定的区域进行重新计算,以提高计算效率,那么可以使用下面的代码。
  1. #001  Sub CalculationSpecialRange()
  2. #002      Dim OldCalculation As XlCalculation
  3. #003      OldCalculation = Application.Calculation
  4. #004      Application.Calculation = xlCalculationManual
  5. #005      ActiveSheet.Range("A1:D10").Calculate
  6. #006      Application.Calculation = OldCalculation
  7. #007  End Sub
复制代码
代码解析:
       CalculationSpecialRange过程对单元格A1到B10区域进行重新计算。
       第3行代码保存当前应用程序的Calculation属性设置。应用于Application对象的Calculation属性返回或设置当前应用程序的计算模式,可为表格所示的XlCalculation常量之一。
XlCalculation 常量.jpg
       第4行代码将计算模式设置为手动重算。
       第5行代码重新计算活动工作表指定的单元格区域B3:D7。(指定区域之外的公式将不重新计算,但包含易失性函数的公式除外)
       第6行代码恢复当前应用程序的Calculation属性设置。

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

技巧18 重新计算工作表指定区域.rar

4.28 KB, 下载次数: 2827

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

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

第1部分Range(单元格)对象

技巧19         单元格录入数据后自动保护
       下面的代码可以使用户在单元格录入数据后自动对已录入数据单元格进行保护,防止修改数据
  1. #001  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. #002      On Error Resume Next
  3. #003      Sheet1.Unprotect Password:="12345"
  4. #004      If Target.Value <> "" Then
  5. #005          Target.Locked = True
  6. #006          Sheet1.Protect Password:="12345"
  7. #007      End If
  8. #008  End Sub
复制代码
代码解析:
       工作表的SelectionChange事件,在单元格录入数据后自动对已录入数据单元格进行保护。
       第3行代码使用Unprotect方法取消工作表的保护。应用于Worksheet 对象的Unprotect方法取消工作表的保护,如果工作表不是受保护的,则此方法不起作用,语法如下:
expression.Unprotect(Password)
       参数expression是必需的,该表达式返回一个Worksheet 对象。
       参数Password是可选的,指定用于解除工作表的保护的密码,此密码是区分大小写的。
       第4、5行代码单元格录入数据后将Locked属性设置为True。Locked属性应用于Range对象时,如果Range对象被锁定,则该值为True,当工作表有保护时Range对象不可被修改。
       第6行代码使用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

[ 本帖最后由 yuanzhuping 于 2009-3-2 08:55 编辑 ]

技巧19 单元格录入数据后自动保护.rar

5.79 KB, 下载次数: 3093

TA的精华主题

TA的得分主题

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

第1部分Range(单元格)对象

技巧20         工作表事件Target参数的使用方法
       在工作表的SelectionChange事件中,参数Target代表新选定的区域,在工作表的Change事件中参数Target代表更改的区域。在实际应用中可以使用Target参数将触发工作表事件的区域限制在一定的范围内,有以下几种方法:
20-1        使用Address 属性
       使用Address属性可以将触发条件限制在某一个单元格中,如下面的代码所示。
  1. #001  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. #002      If Target.Address(0, 0) = "A1" Then
  3. #003          MsgBox "你选择了A1单元格"
  4. #004      End If
  5. #005  End Sub
复制代码
代码解析:
       当选择工作表A1单元格时显示一个消息框。
       第2行代码使用Address属性返回所选单元格的区域引用,当返回的区域引用是“A1”时触发SelectionChange事件,显示一个消息框。
       此方法只适用于单个单元格或者加上OR运算符可以适用于几个单元格,多则不方便。
20-2        使用Column属性和Row属性
       使用单元格的Column属性和Row属性可以将触发条件限制在某一区域内,如下面的代码所示。
  1. #001  Private Sub Worksheet_Change(ByVal Target As Range)
  2. #002      If Target.Column = 1 And Target.Row < 11 Then
  3. #003          Target.Offset(, 1) = Val(Target) * 3
  4. #004      End If
  5. #005  End Sub
复制代码
代码解析:
       当改变工作表的A1到A10单元格时,如果输入的是数值则将在对应的B列单元格写入乘以3的数值。
       第2行代码使用Column属性将触发条件限制在第1列,使用Row属性将触发条件限制在第10行以内,也就是A1到A10的区域范围内。
20-3        使用Intersect方法
       使用Intersect方法可以很方便的指定一个或多个区域范围,如下面的代码所示。
  1. #001  Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. #002      If Not Application.Intersect(Target, Union(Range("A1:A10"), Range("C1:C10"))) Is Nothing Then
  3. #003          MsgBox "你选择了" & Target.Address(0, 0) & "单元格"
  4. #004      End If
  5. #005  End Sub
复制代码
代码解析:
       当选择工作表A1到A10,C1到C10单元格时将所选的单元格地址显示在消息框中。
       第2行代码使用Intersect方法判断所选单元格是否与A1到A10,C1到C10单元格重叠,如果重叠说明所选单元格在A1到A10,C1到C10单元格区域内。Intersect方法返回一个Range对象,此对象代表两个或多个范围重叠的矩形区域,语法如下:
expression.Intersect(Arg1, Arg2, ...)
       参数expression是可选的,返回一个Application对象。
       参数Arg1, Arg2, ...是必需的,重叠的区域。必须指定至少两个 Range对象。

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

技巧20 工作表事件的Target参数的使用方法.rar

7.92 KB, 下载次数: 3277

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

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

第1部分Range(单元格)对象

第1部分Range(单元格)对象已经完成,附件是这部分的Word文档和附件,第2部分是Worksheet(工作表)对象。

[ 本帖最后由 yuanzhuping 于 2009-2-14 00:29 编辑 ]

第1部分Range(单元格)对象.rar

868.56 KB, 下载次数: 10689

点评

版主真是太伟大了!  发表于 2011-10-14 20:40

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-2-12 22:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-12 22:14 | 显示全部楼层
我真是太高兴了,想学习VBA又感觉一时无处入手,现在好了,跟着yuan版主的节奏慢慢学,很有系统性

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-12 23:02 | 显示全部楼层
原帖由 一_一 于 2009-2-12 22:14 发表
我真是太高兴了,想学习VBA又感觉一时无处入手,现在好了,跟着yuan版主的节奏慢慢学,很有系统性

说实话,此贴并不是VBA入门的教程,我也写不出来,论坛中许多版主、高手的贴子都比我写得好。但这些技巧确实都是些最基本的代码,并且围绕这些技巧详细解析了一两个知识点。日积月累,熟练掌握这些技巧并能举一反三、灵活运用时,使用VBA解决一些问题是很简单的,并没有想象中的那么复杂。在此贴的最后我会讲解几个VBA应用的综合实例,你会发现看似复杂的VBA程序无非就是这些基本技巧的变化、组合。

评分

5

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-25 05:57 , Processed in 0.045417 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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