繁体   English   中英

如何从范围中仅复制 excel vba 中的值?

[英]How to copy only values in excel vba from a range?

我正在尝试使用 vba 宏在 Excel 中将值从表复制到范围,但我不想要表格格式,只想要它的值。 我怎样才能做到这一点?

以下是部分代码:

    'Source range
    Set r = Sheets("Sheet1").Range("Table1")

    'Destination range
    Set dest = Range(.Cells(linhaAtual, 1), .Cells(linhaAtual + r.Rows.Count - 1, 5))

    r.Copy Destination:= dest

您可以通过将源范围的值分配给目标范围来完全跳过复制命令:

'Source range
Set r = Sheets("Sheet1").Range("Table1")
'Destination range
Set dest = Range(.Cells(linhaAtual, 1), .Cells(linhaAtual + r.Rows.Count - 1, 5))

dest.Value = r.Value

我相信您正在寻找粘贴值的功能。 你可以记录下来,或者使用我在下面所做的。 (从录制中选择在那里,这会使它运行得更慢,但你没有循环,所以它只是添加恒定的时间)。

Selection.Copy
        'Select your destination like range("destination").select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False

我假设您想从“Sheet1”复制到“Sheet1”-当然您可以将其设为参数并循环遍历所有工作表

Dim rSource as range 'Source Range
Dim rDest as range   'Target Range - It should be the same dimension
Dim wbSource as workbook 'Source Workbook
Dim wbTarget as workbook 'Target Workbook
Dim myRange as string

myRange = "A:G" ' It is an example, you can make it dynamic

'add new workbook
    Workbooks.Add
    Set wbTarget = ActiveWorkbook

'Set the Source Range
    Set rSource = wbSource.Sheets("Sheet1").Range(myRange)

'Destination Range
    Set rDest = wbTarget.Sheets("Sheet1").Range(myRange)

'Copy values only
    rSource.Copy
    rDest.PasteSpecial xlPasteValues

您需要使用 pastespecial 命令,如下所示。

'Source range
Set r = Sheets("Sheet1").Range("Table1")

'Destination range
Set dest = Range(.Cells(linhaAtual, 1), .Cells(linhaAtual + r.Rows.Count - 1, 5))

r.Copy 
dest.pastespecial paste:=xlPasteValues
r.Copy
dest.pastespecial xlPastevalues

我实现了一个可行的解决方案。

下面是代码:

    Set r = Sheets("Criteria").Range("CriteriaTable")

    Set dest = Range(.Cells(linhaAtual, 1), .Cells(linhaAtual + r.Rows.Count - 1, 5))
    Sheets("Criteria").Activate
    r.Select
    Selection.Copy
    Sheets("Load").Activate
    dest.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

使用 Range.Value 方法。 就像设置variable a = 1一样。 您将其视为将 1 复制到 a 的地方。 所以...

Range2.value = Range1.value

或者

Worksheets("historical").Range("A1:F15").Value =  Worksheets("actuals").Range("A1:F15").Value

在这里,我将实际工作表中的一些数据复制到一些历史工作表中。 或者,如果您更喜欢将一个范围的值设置为另一个范围。

您可以完全跳过复制命令,如 MP24 所说。在将最后一行从“值”修改为“公式”后,他的建议对我有用,如下所示

设置 r = Sheets("Sheet1").Range("Table1") 设置 dest = Range(.Cells(linhaAtual, 1), .Cells(linhaAtual + r.Rows.Count - 1, 5))

dest.formula = r.formula

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM