打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA常用代码解析(第三讲)



下面应以为粉丝的要求,开始把我以前的一些学习资料整理了一下,然后分20期发给各位有需要的朋友,您也可以索取源文件,邮箱:546039945@qq.com!


016 高亮显示单元格区域

如果希望以某种方式突出显示活动单元格或者指定的单元格区域,从而一目了然地获得某些信息,那么可以高亮显示活动单元格区域,如下面的代码所示。

Private Sub Worksheet_SelectionChange(ByVal TargetAs Range)

Cells.Interior.ColorIndex= xlColorIndexNone

Target.Interior.ColorIndex= 8

End Sub

代码解析:

设置工作表当前选定区域单元格的内部填充颜色,以高亮显示选定区域。

2行代码将工作表中所有的单元格的内部填充颜色设置为xlColorIndexNone,即取消单元格的内部填充颜色。

3行代码将工作表中选定单元格的内部填充颜色设置为8

应用于Interior对象的ColorIndex属性返回或设置边框内部的颜色。该颜色可指定为当前调色板中颜色的编号或为 XlColorIndex 常量之一:

xlColorIndexAutomatic(指定对图形对象自动填充)xlColorIndexNone(用于指定无内部填充)

还可以高亮显示指定区域内的行列,如下面的代码所示。

Private Sub Worksheet_SelectionChange(ByVal TargetAs Range)

Dimrng As Range

Cells.Interior.ColorIndex= xlNone

Setrng = Application.Union(Target.EntireColumnTarget.EntireRow)

rng.Interior.ColorIndex= 24

End Sub

代码解析:

设置工作表当前选定区域单元格内部填充颜色,高亮显示活动单元格所在的行列。

4行代码使用Union方法将所选单元格所在的行、列连接起来成为一个区域,关于Union方法请参阅▲1-6

注意使用此方法时,工作表中所有设置的单元格内部填充颜色将会被清除。(不包括通过条件格式设置的单元格内部填充颜色),同时无法在工作表中实现复制粘贴功能。

017 双击被保护单元格时不显示提示消息框

当用户使用鼠标左键双击被保护工作表中锁定的单元格区域时,系统将显示消息框。

如果不希望显示该消息框,可以在工作表Worksheet_BeforeDoubleClick事件中进行设置,如下面的代码所示。

Private Sub Worksheet_BeforeDoubleClick(ByValTarget As RangeCancel As Boolean)

If Target.Locked= True Then

MsgBox '此单元格已保护,不能编辑!'

Cancel = True

EndIf

End Sub

代码解析:

当用户使用鼠标左键双击工作表单元格时,触发Worksheet_BeforeDoubleClick事件。该事件中的Target参数代表用户双击鼠标左键的单元格区域。

参数Cancel设置是否取消该操作。如果将参数Cancel设置为True,将不进行默认的双击操作。

2行代码中判断用户双击鼠标左键的单元格区域是否已锁定(Range对象的Locked属性返回或设置Range对象是否锁定),如果单元格区域已锁定,则设置参数Cancel设置为True,不进行默认的双击操作,因而不再显示上图所示的提示的消息框,只显示一个自定义的提示信息,

018 重新计算工作表指定区域

如果在工作表中含有大量公式,那么在对工作表执行重新计算操作时,可能需要较长的时间。在实际工作中,有时希望仅对指定的区域进行重新计算,以提高计算效率,那么可以使用下面的代码。

Sub CalculationSpecialRange()

DimOldCalculation As XlCalculation

OldCalculation= Application.Calculation

Application.Calculation= xlCalculationManual

ActiveSheet.Range('A1:D10').Calculate

Application.Calculation= OldCalculation

End Sub

代码解析:

CalculationSpecialRange过程对单元格A1B10区域进行重新计算。

3行代码保存当前应用程序的Calculation属性设置。应用于Application对象的Calculation属性返回或设置当前应用程序的计算模式,可为表格所示的XlCalculation常量之一。

4行代码将计算模式设置为手动重算。

5行代码重新计算活动工作表指定的单元格区域B3:D7(指定区域之外的公式将不重新计算,但包含易失性函数的公式除外)

6行代码恢复当前应用程序的Calculation属性设置。

019 单元格录入数据后自动保护

下面的代码可以使用户在单元格录入数据后自动对已录入数据单元格进行保护,防止修改数据

Private Sub Worksheet_SelectionChange(ByVal TargetAs Range)

On ErrorResume Next

Sheet1.UnprotectPassword:='12345'

If Target.Value<> ““ Then

Target.Locked = True

Sheet1.Protect Password:='12345'

EndIf

End Sub

代码解析:

工作表的SelectionChange事件,在单元格录入数据后自动对已录入数据单元格进行保护。

3行代码使用Unprotect方法取消工作表的保护。应用于Worksheet 对象的Unprotect方法取消工作表的保护,如果工作表不是受保护的,则此方法不起作用,语法如下:

expression.Unprotect(Password)

参数expression是必需的,该表达式返回一个Worksheet对象。

参数Password是可选的,指定用于解除工作表的保护的密码,此密码是区分大小写的。

45行代码单元格录入数据后将Locked属性设置为TrueLocked属性应用于Range对象时,如果Range对象被锁定,则该值为True,当工作表有保护时Range对象不可被修改。

6行代码使用Protect方法保护工作表。应用于Worksheet对象的Protect方法保护工作表使其不至被修改,语法如下:

expression.Protect(PasswordDrawingObjectsContentsScenariosUserInterfaceOnlyAllowFormattingCellsAllowFormattingColumnsAllowFormattingRowsAllowInsertingColumnsAllowInsertingRowsAllowInsertingHyperlinksAllowDeletingColumnsAllowDeletingRowsAllowSortingAllowFilteringAllowUsingPivotTables)

其中参数expression是必需的,该表达式返回一个Worksheet对象。

参数Password是可选的,为一个字符串,该字符串为工作表指定区分大小写的密码。其他参数都是可选参数,其功能等同于工作表保护对话框中的各项选项。

020 工作表事件Target参数的使用方法

在工作表的SelectionChange事件中,参数Target代表新选定的区域,在工作表的Change事件中参数Target代表更改的区域。在实际应用中可以使用Target参数将触发工作表事件的区域限制在一定的范围内,有以下几种方法:

020-1 使用Address 属性

使用Address属性可以将触发条件限制在某一个单元格中,如下面的代码所示。

Private Sub Worksheet_SelectionChange(ByVal TargetAs Range)

If Target.Address(00) = 'A1' Then

MsgBox '你选择了A1单元格'

EndIf

End Sub

代码解析:

当选择工作表A1单元格时显示一个消息框。

2行代码使用Address属性返回所选单元格的区域引用,当返回的区域引用是“A1”时触发SelectionChange事件,显示一个消息框。此方法只适用于单个单元格或者加上OR运算符可以适用于几个单元格,多则不方便。

020-2 使用Column属性和Row属性

使用单元格的Column属性和Row属性可以将触发条件限制在某一区域内,如下面的代码所示。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column= 1 And Target.Row < 11 Then

Target.Offset(1) = Val(Target) * 3

EndIf

End Sub

代码解析:

当改变工作表的A1A10单元格时,如果输入的是数值则将在对应的B列单元格写入乘以3的数值。

2行代码使用Column属性将触发条件限制在第1列,使用Row属性将触发条件限制在第10行以内,也就是A1A10的区域范围内。

20-3 使用Intersect方法

使用Intersect方法可以很方便的指定一个或多个区域范围,如下面的代码所示。

Private Sub Worksheet_SelectionChange(ByVal TargetAs Range)

If NotApplication.Intersect(TargetUnion(Range('A1:A10')Range('C1:C10'))) Is Nothing Then

MsgBox '你选择了' & Target.Address(00) & '单元格'

EndIf

End Sub

代码解析:

当选择工作表A1A10C1C10单元格时将所选的单元格地址显示在消息框中。

2行代码使用Intersect方法判断所选单元格是否与A1A10C1C10单元格重叠,如果重叠说明所选单元格在A1A10C1C10单元格区域内。Intersect方法返回一个Range对象,此对象代表两个或多个范围重叠的矩形区域,语法如下:

expression.Intersect(Arg1Arg2...)

参数expression是可选的,返回一个Application对象。

参数Arg1Arg2...是必需的,重叠的区域。必须指定至少两个 Range对象。

2部分Worksheet(工作表)对象

021 引用工作表的方式

VBA中,在不同的工作表之间转换或者对不同工作表中的单元格区域进行操作时,需要指定引用的工作表,通常有下面几种方法:

021-1 使用工作表的名称

工作表名称是指显示在工作表标签中的文本,工作表名称可以使用WorkSheets集合和Sheets集合两种引用方式,如下面的代码所示。

Sub ShActivate()

Worksheets('索引号').Activate

'Sheets('索引号').Activate

End Sub34行代码都激活工作簿中名称为“索引号”的工作表,激活后“索引号”工作表将成为活动工作表。

WorkSheets集合包含所有的工作表,而Sheets集合不仅包含工作表集合WorkSheets,还包含图表集合Charts、宏表集合Excel4MacroSheetsMS Excel 5.0对话框集合DialogSheets等。

任何时刻工作簿中只有一个工作表是活动工作表。

021-2 使用工作表的索引号

工作表索引号是指工作表在工作簿中的位置,Excel根据工作表在工作表标签中的位置以1开始从左向右进行编号。下面的代码选中并激活当前工作簿中第1个工作表:

Sub ShIndex()

Worksheets(1).Select

End Sub单个WorkSheet对象的Select方法与Activate方法的主要区别在于Select方法要求工作表可视。

注意当工作簿包括工作表、宏表、图表等时,使用索引号引用工作表如Sheets(1)WorkSheets(1)引用的可能不是同一个表。

021-3 使用工作表的代码名称

使用Worksheet对象的CodeName属性可以返回工作表的代码名称,如下面的代码所示。

Sub ShCodeName()

MsgBoxSheets(1).CodeName

End Sub工作表的代码名称显示在VBE工程资源管理器窗口中,在属性窗口中能够修改工作表代码名称。在VBA中能够直接使用工作表的代码名称引用工作表,即使工作表的名称被修改,代码仍然能够正常运行。

021-4 使用ActiveSheet属性引用活动工作表

使用ActiveSheet属性可以返回活动工作表,如下面的代码所示。

Sub ShActive()

MsgBoxActiveSheet.Name

End Sub

ActiveSheet属性应用于AppActivate对象、Window对象和Workbook对象时,如果未给出对象识别符,返回活动工作簿中的活动工作表。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
4.'Change事件
VBA中工作表事件 参数Target
第七篇 Excel自动化
VBA的层级关系,程序、工作表、工作薄、单元格
Worksheet的Change事件
Excel VBA 入门
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服