PasteSpecial(格式和值)

时间:2018-01-23 21:03:32

标签: excel vba copy paste

我有一个创建表的excel程序/按钮。输入在工作表1上的单行/多列中。输出相同但在工作表2上。两列工作表上的标题相同。在输入表上,其中一个列标题有一个下拉菜单,其他列有标题。单击按钮时,行将被复制/粘贴到输出表。我可以通过从下拉框中选择不同的项目并按下按钮运行程序来填充表2中的表来重复此过程。问题是我只想复制和粘贴值。更改工作表1上的下拉框会将所有信息更改为工作表2上的相同项目。

代码如下:

TEdit

如何仅粘贴值和格式(没有公式或下拉菜单)?

2 个答案:

答案 0 :(得分:0)

您可以将PasteSpecialxlPasteValuesAndNumberFormats选项一起使用。

Range("B5:M6").Copy
Sheets("MTO").Range("B" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial _
                Paste:=xlPasteValuesAndNumberFormats, _
                Operation:=xlNone, SkipBlanks:=False, Transpose:=False

复制操作后,我有时会想要清除剪贴板,因此不会再次意外粘贴复制的范围。我用这个程序:

Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long

Public Sub ClearClipboard()
    OpenClipboard (0&)
    EmptyClipboard
    CloseClipboard
End Sub

您可以将它添加到常规代码模块的顶部,然后使用以下代码行从您的任何过程中调用它:

ClearClipboard

答案 1 :(得分:0)

这是一种简单的方法。您可以执行值,然后格式化。我使用了两个变量(可能是矫枉过正,是的),但它会告诉你如何使用范围来设置复制/目的地范围,从长远来看这将有所帮助。

Sub copy_val_format()
    Dim copyRng As Range
    Dim destRng As Range
    Set copyRng = Sheets("Sheet1").Range("B5:M6")
    Set destRng = Sheets("MTO").Range("B" & rows.Count).End(xlUp).Offset(1, 0)

    copyRng.Copy
    destRng.PasteSpecial (xlPasteValues)
    copyRng.Copy
    destRng.PasteSpecial (xlPasteFormats)

    Application.CutCopyMode = False
End Sub

或更简单的版本:

Sub simpler()
    Dim lastCell as Range
    Set lastCell = Sheets("MTO").Range("B" & Rows.Count).End(xlUp).Offset(1, 0)

    Sheets("Sheet1").Range("B5:M6").Copy
    lastCell.PasteSpecial (xlPasteValues)

    Sheets("Sheet1").Range("B5:M6").Copy
    lastCell.PasteSpecial (xlPasteFormats)
    Application.CutCopyMode = False
End Sub