VBA常用技巧(一) 下载本文

Range对象的Comment属性返回一个批注对象,如果指定的单元格不存在批注,该属性返回Nothing。

运行HasComment过程结果如图 xii-1所示。

图 xii-1 显示批注内容

2. 为单元格添加批注

如果希望为单元格添加批注,那么可以使用AddComment方法,如下面的代码所示。

#001 Sub Comment_Add() #002 With Range(\

#003 If .Comment Is Nothing Then #004 .AddComment Text:=.Value #005 .Comment.Visible = True #006 End If #007 End With #008 End Sub

代码解析:

Comment_Add判断单元格A1中是否存在批注,如果没有批注则为单元格A1添加批注并将单元格数值作为批注文本,同时显示批注对象。

第4行代码使用Range对象的AddComment方法为单元格添加批注。该方法只有一个参数Text,代表批注文本。如果单元格已经存在批注,则该方法返回一个错误。

第5行代码显示批注对象,Visible属性确定对象是否可视。 当单元格A1中不存在批注时,运行代码后的结果如图 xii-2所示。

图 xii-2 添加批注

3. 删除单元格中的批注

如果需要删除单元格中的批注,那么可以使用ClearComments方法、ClearNotes方法或者Delete方法,如下面的代码所示。

#001 Sub Commentdel()

#002 On Error Resume Next #003 Range(\#004 Range(\#005 Range(\#006 End Sub

代码解析:

Notesdel过程删除单元格中的批注。

第2行代码错误处理语句,如果单元格中没有批注,那么运行第5行代码时会发生错误,所以使用On Error语句来忽略错误

第3行代码使用ClearComments方法删除单元格A1中的批注。ClearComments方法清除指定区域的所有单元格批注,语法如下:

expression.ClearComments

第4行代码使用ClearNotes方法删除A2单元格中的批注。ClearNotes方法清除指定区域中所有单元格的附注和语音批注,语法如下:

expression.ClearNotes

第5行代码使用Delete方法删除删除A3单元格中的批注.Range对象的Comment属性返回一个Comment对象,该对象代表与该区域左上角单元格相关联的批注。

xiii. 合并单元格操作

1. 判断单元格区域是否存在合并单元格

Range对象的MergeCells属性可以确定单元格区域是否包含合并单元格,如果该属性返回值为True,则表示区域包含合并单元格。

下面的代码判断单元格 A1是否包含合并单元格,并显示相应的提示信息。

#001 Sub IsMergeCell()

#002 If Range(\#003 MsgBox \包含合并单元格\#004 Else

#005 MsgBox \没有包含合并单元格\#006 End If #007 End Sub

如果在指定区域中存在部分合并的单元格,如图 xiii-1所示,区域E8:I17中包含合并单元格区域F8:G9,H12:I13。判断这样一个单元格区域中是否包含合并单元格,可以使用下面的代码快速判断单元格区域中是否包含部分合并单元格,而不需要遍历单元格。

图 xiii-1 包含部分合并单元格的区域

#001 Sub IsMerge()

#002 If IsNull(Range(\#003 MsgBox \包含合并单元格\#004 Else

#005 MsgBox \没有包含合并单元格\#006 End If #007 End Sub

代码解析:

当单元格区域中同时包含合并单元格和非合并单元格时,MergeCells属性将返回Null,因此第2行代码通过该返回结果作为判断条件。

运行IsMerge过程结果如图 xiii-2所示。

图 xiii-2 提示信息

2. 合并单元格时连接每个单元格的文本

使用Excel的“合并及居中”按钮合并多个单元格区域时,Excel仅保留区域左上角单元格的内容,如果用户希望在合并如图 xiii-3所示单元格区域时,将各个单元格的内容连接起来保存在合并后的单元格区域中,则可以使用下面的代码。

图 xiii-3 合并前单元格区域

#001 Sub Mergerng()

#002 Dim StrMerge As String #003 Dim rng As Range

#004 If TypeName(Selection) = \#005 For Each rng In Selection

#006 StrMerge = StrMerge & rng.Value #007 Next

#008 Application.DisplayAlerts = False #009 Selection.Merge

#010 Selection.Value = StrMerge #011 Application.DisplayAlerts = True #012 End If #013 End Sub

代码解析: