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

常量 xlPasteSpecialOperationSubtract xlPasteSpecialOperationMultiply xlPasteSpecialOperationDivide 值 3 4 5 描述 减 乘 除 表格 0-2 XlPasteSpecialOperation常量

参数SkipBlanks指示是否跳过空单元格,若参数值为True,则不将剪贴板上区域中的空白单元格粘贴到目标区域中。默认值为False。

参数Transpose指示是否进行转置,若参数值为True,则粘贴区域时转置行和列。默认值为False。

运行CopyWithSameColumnWidths过程后,Sheet3工作表如图 0-4所示,目标区域的各列列宽与源区域一致。

图 0-4

粘贴列宽后的复制结果

注意 使用PasteSpecial方法时指定xlPasteAll(粘贴全部),不会粘贴列宽。

仅复制数值到另一区域

如果在复制单元格区域时,仅希望复制单元格区域的数值,有下面几种方法。

1. 使用选择性粘贴

使用选择性粘贴功能并指定粘贴数值,如下面的代码所示。

#001 Sub CopyPasteSpecial()

#002 Sheet1.Range(\

#003 Sheet2.Range(\#004 Application.CutCopyMode = False #005 End Sub

代码解析:

CopyPasteSpecial过程复制工作表Sheet1中A1单元格的当前区域的数值到工作表Sheet2的A1单元格所在区域中。

第2行代码将如图 0-1所示的Sheet1中A1单元格的当前区域进行复制。

图 0-1

需复制的数据表

第3行代码使用选择性粘贴功能并指定粘贴数值,选择性粘贴数值仅复制了单元格区域的数值,单元格区域的格式(背景颜色、字体对齐格式和边框等)不会被复制,复制结果如图 0-2所示。

图 0-2

复制单元格区域数值

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过程,赋值结果如图 0-2所示。

vii. 单元格自动进入编辑状态

当光标选择单元格时无需双击,自动进入编辑状态,如下面的代码所示。

#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方法请参阅技巧x.4。

viii. 禁用单元格拖放功能

在工作表中可以拖放单元格右下角的小十字对单元格内容进行复制等操作,如果不希望用户进行此操作可以禁用单元格拖放功能,如下面的代码所示。

#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

#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单元格时将禁用单元格的拖放功能,如图 viii-1所示。

图 viii-1 禁用单元格的拖放功能

ix. 单元格格式操作

1. 单元格字体格式设置

在VBA中可以对单元格的字体格式进行各种设置,如下面的代码所示。