【问题标题】:Copy values and format in VBA macro excel在 VBA 宏 excel 中复制值和格式
【发布时间】:2017-12-05 10:04:06
【问题描述】:

我对这些东西很陌生,即在 excel 中编写宏。我需要修改一个宏,其中内容从一张纸复制到另一张纸,但这里只复制值,而我也想复制单元格格式。我在许多论坛上搜索并尝试复制它们的格式但仍然没有运气。可能是我在我的代码中遗漏了一些东西。

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 中单元格的自定义格式。

如果我在这段代码中遗漏了一些东西,你能帮忙吗?

【问题讨论】:

  • 您需要回复我的答案或在我的用户名前加上@ - 否则我不会收到更新通知。尝试在 PasteSpecial 中将 xlValues 更改为 xlPasteValuesAndNumberFormats
  • 仍然无法使用 xlPasteValuesAndNumberFormats
  • 我刚刚测试了您的代码 - 我必须给 DataStartRow 一个值 2,这样它才能从第 1 行复制。它复制了 "Burt: "#,##0.00;[Red]-#,##0.00 的格式没有问题。您使用的是什么数字格式以及您使用它的值是什么?数字格式是否可能是文本?
  • 我的号码格式是 "**"#,##0[$] 因为我需要显示一个在数字前填充星号的数字。例如**55
  • 我能想到的只是您的数字被视为文本。我正在使用123'546-188465。使用您的格式,这些将被复制为**123546(这是格式化为带有前面' 的文本)、- **18**8,465。所以 546 是唯一没有正确复制的数字 - 数字前是否有撇号 (')?

标签: vba excel


【解决方案1】:

如果您想复制所有内容,您可以在同一命令中复制并粘贴到目标位置。

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

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

【讨论】:

  • 但我需要进行选择。有什么办法可以处理选定的代码?
  • 您的代码不适用于用户选择 - 它会选择一系列单元格并粘贴到其中。通常最好只粘贴到该范围而不是先选择它。但是,如果您想使用用户选择 - 您是要复制选择还是粘贴到选择?要粘贴到选择,请使用 .Range(.Cells(DataStartRow - 1, 1), .Cells(DataStartRow - 1, 4)).Copy Destination:=Selection 从选择中复制使用 Selection.Copy Destination:=res.Cells(9, 1)(在最后一种情况下,您可能会丢失 With..End With 块。
  • 我已经用选择的复制/粘贴注释掉代码更新了我的答案...我不相信用户做出正确的选择(键盘之间发生了很多错误和椅子)。
  • 达伦,我已经编辑了我的代码并发布在上面。您能否看看并告诉我其中是否缺少某些内容,因为我仍然没有得到格式化的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
相关资源
最近更新 更多