VBA Macro Excel中的复制值和格式



我对这些东西很陌生,即在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

可能是我认为我不是在编写正确格式的超级代码。

有人可以帮助我获取正确的格式以复制和粘贴值,以及从一个纸上到另一张的单元格格式?

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

,但仍然将数字作为我的单元格的格式,而不是在Sheep1中分配给单元的自定义。

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

如果要复制所有可以将所有内容复制并粘贴到同一命令中的目标。

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

如果您只需要值和单元格格式,则可以使用两个pastepecial命令:

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

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

最新更新