常见的复制粘贴,VBA是怎么做的(续)

2022-03-04 15:52:57 浏览数 (1)

上文参见:常见的复制粘贴,VBA是怎么做的>>>

标签:VBA

使用Worksheet.Paste方法复制粘贴

Worksheet.Paste(Excel VBA没有Range.Paste方法)在某种程度上与Range.PasteSpecial方法非常相似。Paste方法的主要目的是将剪贴板包含的内容粘贴到相关工作表上。

Worksheet.Paste方法的基本语法如下:

expression.Paste(Destination, Link)

其中,expression代表Worksheet对象。

参数Destination是要粘贴剪贴板内容的Range对象,由于该参数可选,因此可以忽略它;如果忽略,Excel会将剪贴板的内容粘贴到当前所选区域中,因此,如果省略该参数,则必须在使用Worksheet.Paste方法之前选择目标区域。只有在满足以下两个条件时,才能使用Destination参数:(i)剪贴板的内容可以粘贴到某个区域内,以及(ii)不使用Link参数。

参数Link可以建立到粘贴数据的源的链接,要执行此操作,将该参数设置为True;该参数的默认值为False,表示不建立到源数据的链接。如果在使用Worksheet.Paste方法时使用参数Destination,那么不能使用参数Link。下面的示例5显示了如何指定粘贴链接的目标。

示例4:复制和粘贴

使用Worksheet.Paste方法复制粘贴数据:

代码语言:javascript复制
Sub Copy_Paste()
    Worksheets("SampleData").Range("B5:M107").Copy
    Worksheets("Example 4 -Paste").Paste _
        Destination:=Worksheets("Example4 - Paste").Range("B5:M107")
    Worksheets("Example 4 -Paste").Columns("B:M").AutoFit
    Application.CutCopyMode = False
End Sub

示例5:复制和粘贴链接

使用Worksheet.Paste方法,用于将链接粘贴到源数据。

代码语言:javascript复制
Sub Copy_Paste_Link()
    Worksheets("Sample Data").Range("B5:M107").Copy
    Worksheets("Example 5 -Paste Link").Activate
   ActiveSheet.Range("B5").Select
    ActiveSheet.Paste _
        Link:=True
   Worksheets("Example 5 -Paste Link").Columns("B:M").AutoFit
End Sub

过程中使用了Worksheet.Activate方法,主要目的是激活相关工作表,等价于单击Excel界面下方的工作表选项卡。ActiveSheet.Range(“B5”).Select方法,用于选择相关的单元格。

这个特定的过程使用Worksheet.Activate和Range.Select方法的原因,是指在使用Link参数时不能使用Paste方法的Destination参数。在没有Destination参数的情况下,Worksheet.Paste方法将剪贴板的内容粘贴到当前选择区域上。在本例中,如上所示的Worksheet.Activate和Range.Select方法确定了当前选择区域。

查看运行该示例过程的结果,可以发现(i)没有粘贴边框或数字格式,以及(ii)源区域中为空的单元格在建立链接时显示0。

使用Range.CopyPicture方法复制粘贴

Range.CopyPicture方法允许将Range对象复制为图片。

该对象始终复制到剪贴板。换句话说,没有Destination参数允许指定复制区域的目标。

Range.CopyPicture方法的语法:

expression.CopyPicture(Appearance, Format)

其中,expression代表想要复制的Range对象。

CopyPicture方法有两个可选参数:Appearance和Format。注意,这两个参数与Excel在“复制图片”对话框中显示的参数完全相同。

在VBA中,“复制图片”对话框中的每个选项都有对应的VBA设置值。

Appearance参数指定如何将复制的区域实际复制为图片。在VBA中,可以通过使用XLPictureApearance枚举中的合适值来指定:xlScreen(或1)表示外观应尽可能接近屏幕上显示的外观;xlPrinter(或2)表示打印时的显示复制图片。

Format参数允许指定图片的格式。用于指定格式的枚举是XlCopyPictureFormat枚举:xlBitmap(或2)代表位图(.bmp,.jpg,或.gif格式);xlPicture(或-4147)表示绘制图片(.png,.wmf,或.mix)格式。

示例6:复制为图片

使用Range.CopyPicture方法将数据复制为图片:

代码语言:javascript复制
Sub Copy_Picture()
    Worksheets("SampleData").Range("B5:M107").CopyPicture _
        Appearance:=xlScreen, _
        Format:=xlPicture
    Worksheets("Example 6 -Copy Picture").Paste _
       Destination:=Worksheets("Example 6 - CopyPicture").Range("B5")
End Sub

其中,Appearance:=xlScreen,指定Excel复制单元格区域的方式与屏幕上的显示方式相似。Format:=xlPicture,指定绘制图片格式。

使用Range.Value和Range.Formula属性复制粘贴

严格来说,这些方法不会复制和粘贴单元格区域的内容。但是,如果只想将(i)值或(ii)特定源区域的公式复制并粘贴到另一个目标区域中,可能会发现它们很有用。

事实上,如果只是复制和粘贴值或公式,那么可能应该使用VBA来执行此任务,而不是依赖于上面介绍的Range.PasteSpecial方法。这样做的主要原因是性能和速度:这种策略倾向于产生更快的VBA代码(比使用Range.Copy方法更快)。

为了达到使用这种更快的方法复制和粘贴值或公式的目的,使用Range.Value属性或Range.Formula属性(取决于具体情况):Range.Value属性返回或设置特定区域的值;Range.Formula属性以A1样式引用返回或设置公式。

Range.Value属性的语法:

expression.Value(RangeValueDataType)

Range.Formula属性的语法:

expression.Formula

这两种情形,expression都是一个代表Range对象的变量。

Range.Value的唯一可选参数是RangeValueDataType,使用xlRangeValueDataType枚举中的值指定区域值数据类型。然而,可以理解如何实现在这里描述的方法,以便将值从一个区域复制和粘贴到另一个范围,而不必过多地关注此参数。

示例7:设置目标区域的Value属性

下面的宏将工作表“Example 7 – Values”的单元格区域B5至M107的值设置为等于工作表“Sample Data”的单元格区域B5至M107的值。

代码语言:javascript复制
Sub Change_Values()
    Worksheets("Example 7 -Values").Range("B5:M107").Value = Worksheets("SampleData").Range("B5:M107").Value
    Worksheets("Example 7 -Values").Columns("B:M").AutoFit
End Sub

要使这种复制和粘贴值的方式起作用,源和目标区域的大小必须相同。

示例8:设置目标区域的Formula属性

下面的宏将工作表“Example 8 – Formulas”的单元格区域B5至M107的公式设置为与工作表“Sample Data”的单元格区域B5至M107的公式相同。

代码语言:javascript复制
Sub Change_Formulas()
    Worksheets("Example 8 -Formulas").Range("B5:M107").Formula = Worksheets("SampleData").Range("B5:M107").Formula
    Worksheets("Example 8 -Formulas").Columns("B:M").AutoFit
End Sub

注意,与示例7一样,源和目标区域的大小必须相同。

此外,当单元格包含常量时,Formula属性将返回常量。如果单元格为空,则Range.Formula返回空字符串。如果单元格包含公式,则Range.Formula属性以字符串形式返回公式,并在开头包含等号(=)。

如何取消剪切或复制模式并删除移动边框

如果在使用VBA复制和粘贴单元格或单元格区域时必须(或选择)使用剪贴板,则可能需要在宏结束之前取消剪切或复制模式,这将删除复制的单元格区域周围的移动边框。

取消剪切或复制模式并删除移动轮廓的VBA语句如下:

Application.CutCopyMode = False

关于复制粘贴:其他的VBA方法

基于本文的介绍,可能还想学习或探索其他可用于粘贴其他对象或实现不同的目标。下面列出了一些,供参考。

1.Chart.CopyPicture方法,将选定的图表对象粘贴为图片。

2.Chart.Copy方法和Charts.Copy方法,将图表工作表表复制到另一个位置。

3.Chart.Paste方法,将数据粘贴到特定图表中。

4.ChartArea.Copy方法,将图表的图表区域复制到剪贴板。

5.ChartObject.Copy方法和ChartObjects.Copy方法,将嵌入的图表复制到剪贴板。

6.ChartObject.CopyPicture方法和ChartObjects.CopyPicture方法,将嵌入的图表作为图片复制到剪贴板。

7.Floor.Paste方法,用于将剪贴板中的图片粘贴到特定图表的底层。

8.Point.Copy方法,(当图表系列中的一个点有图片填充时)将相关图片复制到剪贴板。

9.Point.Paste方法,将剪贴板中的图片粘贴为图表系列中特定点的标记。

10.Range.CopyFromRecordset方法,将数据访问对象(DAO)或ActiveX数据对象(ADO)Recordset对象的内容复制到工作表中。

11.Series.Copy方法,复制图表中系列上标记的图片填充(如果系列具有图片填充)。

12.Series.Paste方法,将剪贴板中的图片粘贴为图表中特定系列的标记。

13.SeriesCollection.Paste方法,将剪贴板上的数据粘贴到图表系列集合中。

14.Shape.CopyPicture方法,将对象作为图片复制到剪贴板。

15.Sheets.Copy方法,将工作表复制到其他位置。

16.Slicer.Copy方法,将切片器复制到剪贴板。

17.Walls.Paste方法,将剪贴板中的图片粘贴铺满图表。

18.Worksheet.Copy方法,将工作表复制到其他位置。

19.Worksheet.PasteSpecial方法,使用指定格式将剪贴板中的内容粘贴到工作表上。此特定方法通常用于粘贴(i)来自其他应用程序的数据,或(ii)以特定格式粘贴数据。

上述列表没有包括复制和粘贴对象的所有VBA方法,主要涵盖了应用于某些主要对象的方法,如图表和工作表。

小结

现在,你应该了解了在Excel中复制和粘贴单元格和单元格区域时可以使用的最重要的VBA方法。包括:

1.Range.Copy方法

2.Range.PasteSpecial方法

3.Worksheet.Paste方法

4.Range.CopyPicture方法

5.Range.Value和Range.Formula属性

0 人点赞