在VBA宏excel中复制值和格式

时间:2017-12-05 10:04:07

标签: excel vba excel-vba

我对这个东西很新,即在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中的单元格的自定义格式。

如果我错过了此代码中的某些内容,您能帮忙吗?

1 个答案:

答案 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

注意:我还没有在代码中选择任何单元格。你只需要引用它们。