使用PasteSpecial时参数化粘贴值

时间:2018-11-27 14:48:09

标签: excel vba excel-vba

我一直希望有一个表格,以便在将某些列从一本WorkBook复制粘贴到另一本时,可以根据需要修改“ Paste:=”参数。令我惊讶的是:

'The code itself work if i change paste for the regular xlPasteAll or any 
'of those, this are just the "key" lines

whichPaste = columnRaw.Offset(0, 2)  'whichPaste is defined as a String
destinySheet.range(letterMarket & firstMarketRow + 1).Select
Selection.PasteSpecial Paste:=whichPaste

我已经看到xlPasteAll是一个Enum,因此我知道它不能作为String使用。那我应该只使用具有的关联整数吗?没有更好的方法来解决这个问题?

谢谢!

最后,我对接受的答案表示感谢:

whichPaste = translatePaste(whichPaste)
Selection.PasteSpecial Paste:=CInt(whichPaste)

translatePaste为:

Function translatePaste(whichPaste As String) As String
    If whichPaste = "xlPasteAll" Then
        translatePaste = "-4104"
    ' more casuistics...
    End If

End Function

1 个答案:

答案 0 :(得分:2)

一种选择是使用xlPasteType documentation中的相应值。

如果您的表包含枚举的特定成员(例如xlPasteAllxlPasteValues等),则另一个选项可能是简单的辅助函数,也许是这样的:

Function ConvertPasteType(pasteType As String) As Integer
    Select Case pasteType
        Case "xlPasteAll"
            ConvertPasteType = xlPasteAll
        Case "xlPasteValues"
            ConvertPasteType = xlPasteValues
        ' and so on
    End Select
End Function

然后:

whichPaste = columnRaw.Offset(0, 2) 
destinySheet.range(letterMarket & firstMarketRow + 1).PasteSpecial Paste:=ConvertPasteType(whichPaste)