【发布时间】: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、-18和8465。使用您的格式,这些将被复制为**123、546(这是格式化为带有前面'的文本)、- **18和**8,465。所以 546 是唯一没有正确复制的数字 - 数字前是否有撇号 (')?