我对这个东西很新,即在excel中编写宏。我需要修改一个宏,其中内容从1张复制到另一张,但这里只复制值,而我也想复制单元格格式。我在一些论坛上搜索并试图复制他们的格式,但仍然没有运气。可能是我在代码中遗漏了一些东西。
strActiveSheet - 复制内容的工作表
res - 正在粘贴内容的工作表
With Sheets(strActiveSheet)
.Select
.Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Select
Selection.Copy
End With
'Paste
Sheets(res).Select
Cells(9, 1).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
此代码只复制该值。我试图使用以下代码,但无济于事:
Sheets(res).Select
Cells(9, 1).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
如果我使用以下代码,这只会复制格式但省略值:
Sheets(res).Select
Cells(9, 1).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
可能我认为我没有以正确的格式编写PasteSpecial代码。
有人可以帮助我在VBA中获取正确的格式,以便将值和单元格格式从一张纸复制到另一张吗?
Darren - 我已经编辑了我的代码并按照你在答案中指定的那样使用了:
Dim wrkSht As Worksheet
Set wrkSht = ThisWorkbook.Worksheets("Sheet1")
Dim resSheet As Worksheet
Set resSheet = ThisWorkbook.Worksheets("Demo")
With wrkSht
.Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Copy
End With
With resSheet
.Cells(9, 1).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Cells(9, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End With
但它仍然将数字作为我的单元格的格式而不是分配给Sheet1中的单元格的自定义格式。
如果我错过了此代码中的某些内容,您能帮忙吗?
答案 0 :(得分:0)
如果要复制所有内容,可以在同一命令中复制并粘贴到目标。
Sub Test()
Dim DataStartRow As Long
DataStartRow = 2
Dim wrkSht As Worksheet
Set wrkSht = ThisWorkbook.Worksheets("Sheet1")
Dim res As Worksheet
Set res = ThisWorkbook.Worksheets("Sheet2")
With wrkSht
.Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Copy Destination:=res.Cells(9, 1)
End With
' Copy user selection
' Selection.Copy Destination:=res.Cells(9, 1)
' Paste to user selection
' With wrkSht
' .Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Copy Destination:=Selection
' End With
End Sub
如果您只想要值和单元格格式,则可以使用两个PasteSpecial命令:
Sub Test()
Dim DataStartRow As Long
DataStartRow = 2
Dim wrkSht As Worksheet
Set wrkSht = ThisWorkbook.Worksheets("Sheet1")
Dim res As Worksheet
Set res = ThisWorkbook.Worksheets("Sheet2")
With wrkSht
.Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Copy
End With
With res
.Cells(9, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
.Cells(9, 1).PasteSpecial Paste:=xlPasteFormats
End With
' Copy user selection
' Selection.Copy
' Paste to user selection
' With Selection
' .PasteSpecial Paste:=xlPasteValuesAndNumberFormats
' .PasteSpecial Paste:=xlPasteFormats
' End With
End Sub
注意:我还没有在代码中选择任何单元格。你只需要引用它们。