VBA-选择性粘贴PasteSpecial
Range对象.PasteSpecial(Paste,Operation,SkipBlanks,Transpose)
参数均为可选。若没有指定参数,则直接复制。
Paste xlPasteType常量,指定复制的具体内容。默认为全部复制。
- 全部 xlPasteAll
- 公式 xlPasteFormulas
- 数值 xlPasteValues
- 格式 xlPasteFormats
- 批注 xlPasteComments
- 验证 xlPasteValidation
- 所有使用源主题的单元 xlPasteAllUsingSourceTheme
- 边框除外 xlPasteAllExceptBorders
- 列宽 xlPasteColumnWidths
- 公式和数字格式 xlPasteFormulasAndNumberFormats
- 值和数字格式 xlPasteValuesAndNumberFormats
- 所有合并条件格式 xlPasteAllMergingConditionalFormats
Operation xlPasteSpecialOperation常量,指明粘贴时要进行的运算操作,即将复制的单元格中的数据与指定单元格区域中的值进行加减乘除运算。
- 无 xlPasteSpecialOperationNone
- 加 xlPasteSpecialOperationAdd
- 减 xlPasteSpecialOperationSubtract
- 乘 xlPasteSpecialOperationMultiply
- 除 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