如何使用 VBA 保存格式和值在 excel 中的数据?

How to save data with formats and values in excel using VBA?

我正在尝试使用格式和值而非公式将数据从 sheet("Billing") 保存到另一个 sheets("Bill_Register")。 Pasteformats 和 pastevalues 分开工作而不是一起工作。请给我推荐一个更好的VBA。提前致谢。

Sub Save_invoice()

Dim i As Integer
Dim last As Long
Dim rng As Range, rng2 As Range


last = Sheets("Bill_Register").Range("A100000").End(xlUp).Row

Set rng = Sheets("Billing").Range("A1:J42")
Set rng2 = Sheets("Bill_Register").Range("A" & last + 2)

rng.Copy
rng2.PasteSpecial Paste:=xlPasteFormats
rng.Copy
rng2.PasteSpecial Paste:=xlPasteValues

End Sub

如果 rngrng2 具有完全相同的大小(行和列),那么您可以使用它来获取值:

rng2.Cells.Value = rng.Cells.Value

一些MCVE:

Public Sub TestMe()

    Dim rng As Range
    Dim rng2 As Range

    Set rng = Range("A1:B2")
    Set rng2 = Range("D2:E3")

    rng2.Cells.Value = rng.Cells.Value

End Sub

如果您对数字格式等感兴趣但不一定对填充颜色等感兴趣,那么您可以使用:

Rng.Copy
rng2.PasteSpecial Paste:=xlPasteValuesAndNumberFormats

没有理由复制两次,一旦它在剪贴板中,它就在那里直到被替换。

先粘贴值,再粘贴格式:

Sub Save_invoice()

Dim i As Integer
Dim last As Long
Dim rng As Range, rng2 As Range


last = Sheets("Bill_Register").Range("A100000").End(xlUp).Row

Set rng = Sheets("Billing").Range("A1:J42")
Set rng2 = Sheets("Bill_Register").Range("A" & last + 2)

rng.Copy
rng2.PasteSpecial Paste:=xlPasteValues
rng2.PasteSpecial Paste:=xlPasteFormats


End Sub

如果您合并了单元格并使用了 xlPasteValues,则会发生错误。 使用变体数组。

Sub Save_invoice()

Dim i As Integer
Dim last As Long
Dim rng As Range, rng2 As Range
Dim vDB

last = Sheets("Bill_Register").Range("A100000").End(xlUp).Row

Set rng = Sheets("Billing").Range("A1:J42")
vDB = rng '<~~ set array
Set rng2 = Sheets("Bill_Register").Range("A" & last + 2)

rng.Copy
rng2.PasteSpecial Paste:=xlPasteFormats
rng2.Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB '<~~ get value

End Sub