PasteSpecial(格式和值)
PasteSpecial (Format and Value)
我有一个 excel program/button 创建了一个 table。输入在 sheet 1 上的单个 row/multiple 列中。输出相同,但在 sheet 2 上。两个 sheet 列的标题是相同的。在输入 sheet 上,其中一个列标题有一个下拉菜单,其他列标题有公式。当我单击一个按钮时,该行是 copied/pasted 到输出 sheet。我可以通过从下拉框中选择不同的项目并将按钮推到 运行 程序以在 sheet 2 上填充 table 来重复该过程。问题是我只想复制和粘贴值。更改 sheet 1 上的下拉框会将所有信息更改为 sheet 2 上的同一项目。
代码如下:
Sub AddHardware()
Range("b5:m6").Copy Sheets("MTO").Range("B" & rows.Count).End(xlUp).Offset(1, 0)
End Sub
如何只粘贴值和格式(没有公式或下拉菜单)?
您可以使用 PasteSpecial
和 xlPasteValuesAndNumberFormats
选项。
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
这是一个简单的方法。你可以做值,然后格式化。我使用了两个变量(也许是矫枉过正,是的),但它会告诉你如何使用范围来设置 copy/destination 范围,这将有助于长期 运行.
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
我有一个 excel program/button 创建了一个 table。输入在 sheet 1 上的单个 row/multiple 列中。输出相同,但在 sheet 2 上。两个 sheet 列的标题是相同的。在输入 sheet 上,其中一个列标题有一个下拉菜单,其他列标题有公式。当我单击一个按钮时,该行是 copied/pasted 到输出 sheet。我可以通过从下拉框中选择不同的项目并将按钮推到 运行 程序以在 sheet 2 上填充 table 来重复该过程。问题是我只想复制和粘贴值。更改 sheet 1 上的下拉框会将所有信息更改为 sheet 2 上的同一项目。
代码如下:
Sub AddHardware()
Range("b5:m6").Copy Sheets("MTO").Range("B" & rows.Count).End(xlUp).Offset(1, 0)
End Sub
如何只粘贴值和格式(没有公式或下拉菜单)?
您可以使用 PasteSpecial
和 xlPasteValuesAndNumberFormats
选项。
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
这是一个简单的方法。你可以做值,然后格式化。我使用了两个变量(也许是矫枉过正,是的),但它会告诉你如何使用范围来设置 copy/destination 范围,这将有助于长期 运行.
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