我有一个创建表的excel程序/按钮。输入在工作表1上的单行/多列中。输出相同但在工作表2上。两列工作表上的标题相同。在输入表上,其中一个列标题有一个下拉菜单,其他列有标题。单击按钮时,行将被复制/粘贴到输出表。我可以通过从下拉框中选择不同的项目并按下按钮运行程序来填充表2中的表来重复此过程。问题是我只想复制和粘贴值。更改工作表1上的下拉框会将所有信息更改为工作表2上的相同项目。
代码如下:
TEdit
如何仅粘贴值和格式(没有公式或下拉菜单)?
答案 0 :(得分:0)
您可以将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
答案 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