VBA常用技巧解析
代码解析:
CopyPasteSpecial过程复制工作表Sheet1中A1单元格的当前区域的数值到工作表Sheet2的A1单元格所在区域中。
第2行代码将如图 8-1所示的Sheet1中A1单元格的当前区域进行复制。
图 8-1 需复制的数据表
第3行代码使用选择性粘贴功能并指定粘贴数值,选择性粘贴数值仅复制了单元格区域的数值,单元格区域的格式(背景颜色、字体对齐格式和边框等)不会被复制,复制结果如图 8-2所示。
图 8-2 复制单元格区域数值
8-2 直接赋值的方法
除了使用Copy方法外,还可以使用直接赋值的方法,如下面的代码所示。
#001 Sub GetValueResize()
#002 With Sheet1.Range(\
#003 Sheet3.Range(\= .Value
#004 End With #005 End Sub
代码解析:
GetValueResize过程将工作表Sheet1中的A1单元格的当前区域的数值赋予工作表Sheet3的A1单元格所在的单元格区域。
在对单元格区域直接赋值时,应保证源区域大小与目标区域的大小一致,如果源区域为动态的单元格区域,可使用Resize方法确定目标区域。
运行GetValueResize过程,赋值结果如图 8-2所示。
31
VBA常用技巧解析
技巧9 单元格自动进入编辑状态
当光标选择单元格时无需双击,自动进入编辑状态,如下面的代码所示。
#001 Private Sub Worksheet_SelectionChange(ByVal Target As Range) #002 If Target.Column = 3 And Target.Count = 1 Then #003 If Target <> \
#004 Application.SendKeys \#005 End If #006 End If #007 End Sub
代码解析:
工作表的SelectionChange事件过程,当选择工作表C列有数据单元格时自动进入编辑状态。
第2、3行代码设置SelectionChange事件的触发条件,利用Target参数的Column属性和Count属性将事件的触发条件限制在C列并且只有在选择一个单元格时才发生。
第4行代码使用SendKeys方法发送一个F2键到应用程序,等同于选择单元格后按F2键,使单元格进入编辑状态。关于SendKeys方法请参阅技巧12-4。
技巧10 禁用单元格拖放功能
在工作表中可以拖放单元格右下角的小十字对单元格内容进行复制等操作,如果不希望用户进行此操作可以禁用单元格拖放功能,如下面的代码所示。
#001 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
#002 If Not Application.Intersect(Target, Range(\Then
#003 Application.CellDragAndDrop = False #004 Else
#005 Application.CellDragAndDrop = True #006 End If
32
VBA常用技巧解析
#007 End Sub
代码解析:
工作表的SelectionChange事件过程,在指定的单元格区域禁用单元格的拖放功能。 CellDragAndDrop 属性设置单元格的拖放功能,如果允许使用单元格拖放功能,则该值为True。
为了不影响其他工作表,应在工作表的Deactivate事件中恢复单元格的拖放功能,如下面的代码所示。
#001 Private Sub Worksheet_Deactivate() #002 Application.CellDragAndDrop = True #003 End Sub
代码解析:
工作表的Deactivate事件过程,恢复单元格的拖放功能。
工作表的Deactivate事件当工作表从活动状态转为非活动状态时产生,语法如下:
Private Sub object_Deactivate()
参数object代表Worksheet对象。
当选择工作表“Sheet1”的A1:A15单元格时将禁用单元格的拖放功能,如图 10-1所示。
图 10-1 禁用单元格的拖放功能
技巧11 单元格格式操作
11-1
单元格字体格式设置
在VBA中可以对单元格的字体格式进行各种设置,如下面的代码所示。
33
VBA常用技巧解析
#001 Public Sub RngFont() #002 With Range(\#003 .Name = \华文彩云\#004 .FontStyle = \#005 .Size = 18 #006 .ColorIndex = 3 #007 .Underline = 2 #008 End With #009 End Sub
代码解析:
RngFont过程对单元格A1的字体格式进行设置。
其中第3行代码设置字体为“华文彩云”,应用于Font对象的Name属性返回或设置对象的名称。
第4行代码设置字体为加粗,FontStyle属性返回或设置字体样式。设置为“Bold” 加粗字体,设置为“Italic”倾斜字体,也可以设置成“Bold Italic”。
第5行代码设置字体的大小为18磅,Size属性返回或设置字体大小。
第6行代码设置字体的颜色为红色,应用于Font对象的ColorIndex属性返回或设置字体的颜色,该颜色可指定为当前调色板中颜色的编号,如图 11-1所示。
图 11-1 调色板中颜色的编号
第7行代码设置字体为单下划线类型,Underline属性返回或设置应用于字体的下划线类型,可为表格 11-1所列的XlUnderlineStyle常量之一。
常量 xlUnderlineStyleNone xlUnderlineStyleSingle xlUnderlineStyleDouble 值 -4142 2 -4119 描述 无 单下划线 双下划线 34
VBA常用技巧解析
xlUnderlineStyleSingleAccounting xlUnderlineStyleDoubleAccounting 4 5 会计用单下划线 会计用双下划线 表格 11-1 XlUnderlineStyle常量
运行RngFont过程结果如图 11-2所示。
图 11-2 单元格字体设置
11-2 设置单元格内部格式
设置单元格的Interior属性可以对单元格的内部格式进行设置,如下面的代码所示。
#001 Sub RngInterior()
#002 With Range(\#003 .ColorIndex = 3
#004 .Pattern = xlPatternCrissCross #005 .PatternColorIndex = 6 #006 End With #007 End Sub
代码解析:
RngInterior过程对A1单元格的内部格式进行设置。 第2行代码使用Interior属性返回单元格对象的内部。
第3行代码设置单元格边框内部的颜色为红色。应用于Interior对象的ColorIndex属性返回或设置边框内部的颜色,可指定为如图 11-1所示的当前调色板中颜色的编号或为XlColorIndex 常量之一:xlColorIndexAutomatic (自动填充)、xlColorIndexNone (无内部填充)。
第4行代码设置单元格设置内部图案为十字图案。应用于Interior对象的Pattern属性返回或者设置内部图案。
第5行代码设置单元格设置内部图案的颜色为黄色。应用于Interior对象的PatternColorIndex属性返回或设置内部图案的颜色,可指定为如图 11-1所示的当前调色板中颜色的编号XlColorIndex常量之一:xlColorIndexAutomatic (自动填充)、xlColorIndexNone (无内部填充)。
运行RngInterior过程结果如图 11-3所示。
35