VBA-选择性粘贴PasteSpecial

Range对象.PasteSpecial(Paste,Operation,SkipBlanks,Transpose)

参数均为可选。若没有指定参数,则直接复制。

Paste xlPasteType常量,指定复制的具体内容。默认为全部复制。

  1. 全部 xlPasteAll
  2. 公式 xlPasteFormulas
  3. 数值 xlPasteValues
  4. 格式 xlPasteFormats
  5. 批注 xlPasteComments
  6. 验证 xlPasteValidation
  7. 所有使用源主题的单元 xlPasteAllUsingSourceTheme
  8. 边框除外 xlPasteAllExceptBorders
  9. 列宽 xlPasteColumnWidths
  10. 公式和数字格式 xlPasteFormulasAndNumberFormats
  11. 值和数字格式 xlPasteValuesAndNumberFormats
  12. 所有合并条件格式 xlPasteAllMergingConditionalFormats

Operation xlPasteSpecialOperation常量,指明粘贴时要进行的运算操作,即将复制的单元格中的数据与指定单元格区域中的值进行加减乘除运算。

  1. 无 xlPasteSpecialOperationNone
  2. 加 xlPasteSpecialOperationAdd
  3. 减 xlPasteSpecialOperationSubtract
  4. 乘 xlPasteSpecialOperationMultiply
  5. 除 xlPasteSpecialOperationDivide

SkipBlanks 跳过空单元格

Transpose 转置


只粘贴格式而不粘贴值

Sub testPasteSpecial1()

    Range('C2:C4').Copy

    Range('E2').PasteSpecialPaste:=xlPasteFormats

End Sub

只粘贴值

Sub testPasteSpecial2()

    Range('C2:C4').Copy

    Range('F2').PasteSpecialPaste:=xlPasteValues

End Sub

粘贴值并保持列宽

Sub testPasteSpecial3()

    Range('A1:A3').Copy

    Range('C1').PasteSpecialPaste:=xlPasteColumnWidths

    Range('C1').PasteSpecialPaste:=xlPasteValues

End Sub
or
Sub testPasteSpecial4()

    Range('A1:A3').Copy

    Range('C1').PasteSpecialPaste:=xlPasteColumnWidths

    Range('A1:A3').CopyRange('C1')

End Sub

对粘贴的区域进行运算

Sub testPasteSpecial5()

    Range('C1').Copy

    Range('A1:A3').PasteSpecialOperation:=xlPasteSpecialOperationMultiply

End Sub

将行列转置

Sub testPasteSpecial6()

    Range('A1:A3').Copy

    Range('C1').PasteSpecialTranspose:=True

End Sub

使用PasteSpecial方法时剪贴板中没有数据

说明:使用PasteSpecial方法时会出错。例如,执行下面的代码:

Sub testPasteSpecial7()

    Selection.PasteSpecialPaste:=xlPasteColumnWidths, Operation:=xlNone, _

        SkipBlanks:=False, Transpose:=False

    Selection.PasteSpecialPaste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

        :=False, Transpose:=False

End Sub

VBA会提示:类Range的PasteSpecial方法无效

原因:因为剪贴板中没有可供粘贴的数据。特别是,当你在工作表中复制单元格区域后,在功能区中选择“开发工具”——“宏”或者按Alt F8调出宏对话框时,Excel会清除剪贴板。(事实上,在单元格中使用复制命令后,访问Excel中的任何对话框,剪贴板中的数据都会被清除)因此,再执行上述代码的话,肯定会出错了

解决方法:为了避免出现上述情况,可以将上面的宏过程赋给一个按钮,直接单击按钮执行;或者在VBE中按F5键执行。

发布于 2020-04-04
posted @ 2020-05-24 14:56  天涯海角路  阅读(5607)  评论(0编辑  收藏  举报