如何使用 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
如果 rng
和 rng2
具有完全相同的大小(行和列),那么您可以使用它来获取值:
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
我正在尝试使用格式和值而非公式将数据从 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
如果 rng
和 rng2
具有完全相同的大小(行和列),那么您可以使用它来获取值:
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