我们致力于为大家奉献最有效的经验,让大家能够解决掉问题,但是大家也都知道,每个人遇到的情况都是不一样的,大家在看经验的同时,除了跟随操作,也需要自己的思考,举一反三的解决问题,这样才会变得更加有内涵,一起成长为一样的经验达人。根据二八定律,学好这excel VBA,就能完成80%的工作。
在实际操作中,经常需要复制指定的单元格区域到另外一个单元格区域。要复制指定单元格区域到其他位置,使用Range对象的Copy方法,如下面的代码所示。
#001 Sub RangeCopy()
#002 Application.DisplayAlerts = False
#003 Sheet1.Range("A1").CurrentRegion.Copy Sheet2.Range("A1")
#004 Application.DisplayAlerts = True
#005 End Sub
代码解析:
RangeCopy过程将如图 所示的Sheet1工作表中A1单元格的当前区域复制到Sheet2工作表中以A1单元格为左上角单元格的区域,如图 2所示。
图 ?1 需复制的数据表
图 1?2 复制结果
Range对象的Copy方法的语法如下:
Copy(Destination)
参数Destination表示复制单元格区域的目标区域,如果省略该参数,Excel将把该区域复制到剪贴板中。
使用Copy方法复制单元格区域时,也复制了该单元格区域的格式,如图 1?2所示。
复制单元格区域时,如果目标区域为非空单元格区域,Excel将显示如图 1?3所示的消息框提示是否替换单元格内容,可以设置Application.DisplayAlerts属性值为False,使复制时不出现该消息框。
图 7?3 替换对话框
第2行代码通常复制单元格区域的操作不会将单元格区域的列宽大小同时复制,如图 7?2所示。如果希望在复制单元格区域的同时,也复制源区域的列宽大小,可以使用下面的代码。
#001 Sub CopyWithSameColumnWidths()
#002 Sheet1.Range("A1").CurrentRegion.Copy
#003 With Sheet3.Range("A1")
#004 .PasteSpecial xlPasteColumnWidths
#005 .PasteSpecial xlPasteAll
#006 End With
#007 Application.CutCopyMode = False
#008 End Sub
代码解析:
第4行代码使用Range对象的PasteSpecial方法选择性粘贴剪贴板中的Range对象的列宽。
第5行代码粘贴剪贴板中的Range对象全部内容。
第7行代码取消应用程序复制模式。
应用于Range对象的PasteSpecial方法将剪贴板中的Range对象粘贴到指定区域,在粘贴时可以有选择的粘贴对象的部分属性。其语法如下:
PasteSpecial(Paste, Operation, SkipBlanks, Transpose)
参数Paste指定要粘贴的区域部分,可为表格 7?1所列的XlPasteType常量之一。
表格 7?1 XlPasteType 常量
参数Operation指定粘贴操作。可为表格 1?2所列的XlPasteSpecialOperation常量之一。
表格 1?2 XlPasteSpecialOperation常量
参数SkipBlanks指示是否跳过空单元格,若参数值为True,则不将剪贴板上区域中的空白单元格粘贴到目标区域中。默认值为False。
参数Transpose指示是否进行转置,若参数值为True,则粘贴区域时转置行和列。默认值为False。
运行CopyWithSameColumnWidths过程后,Sheet3工作表如图 7?4所示,目标区域的各列列宽与源区域一致。
图 7?4 粘贴列宽后的复制结果
注意 使用PasteSpecial方法时指定xlPasteAll(粘贴全部),不会粘贴列宽。
如果你在工作中还需要设计其他的表格模板,都可以留言,我们会根据大家需求来整理相关的学习资料,目的只有一个,那就是学好Excel,提高工作效率!