【问题标题】:Paste values instead of formulas粘贴值而不是公式
【发布时间】:2018-09-18 15:18:25
【问题描述】:

我想将单元格中的某些值从一个选项卡复制到另一个选项卡。

    Sheets("Equities").Select
    Range("B5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("ZSM").Select
    Range("B5").Select
    ActiveSheet.Paste
    Sheets("Bonds").Select
    Range("B5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("ZSM").Select
    Range("B5").Select
    Selection.End(xlDown).Select
    Selection.End(xlToRight).Select
    ActiveCell.Offset(1, 1).Select
    ActiveSheet.Paste

我想修改代码以从公式(例如“= J5*K24”)中复制值(我只想要公式返回的值)。

我通过以下方式修改了代码:

    Sheets("Equities").Select
    Range("B5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("ZSM").Select
    Range("B5").Select
    ActiveSheet.PasteSpecial               ###here
    Sheets("Bonds").Select
    Range("B5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("ZSM").Select
    Range("B5").Select
    Selection.End(xlDown).Select
    Selection.End(xlToRight).Select
    ActiveCell.Offset(1, 1).Select
    ActiveSheet.PasteSpecial                  ##here

我阅读了一些有关 PasteSpecial 方法的信息,但无法应用它。

【问题讨论】:

  • 不是您问题的答案,但请阅读How to avoid Select in VBA
  • 比如你可以使用Sheets("Equities").Range("B5").Copy // Sheets("ZSM").Range("B5").PasteSpecial xlValues或者更快捷的单行Sheets("ZSM").Range("B5").value=Sheets("Equities").Range("B5").value
  • xlPasteValues这是可用选项列表docs.microsoft.com/en-us/office/vba/api/excel.xlpastetype
  • 现在我编辑了我的帖子。我希望能澄清问题。谢谢你:)
  • SJR 最初的评论怎么强调都不过分。请避免在 VBA 中使用Select。它可能导致难以调试的奇怪行为。

标签: vba excel excel-2010


【解决方案1】:

忘记 PasteSpecial xlValues 并执行直接值传输,从而完全绕过剪贴板。

dim zsm as worksheet

set zsm = workSheets("ZSM")

with workSheets("Equities")
    with .Range(.range(.cells(5, "B"), .cells(.rows.count, "B").end(xlup)), _
                .range(.cells(5, "B"), .cells(5, .columns.count).end(xltoleft)))
        zsm.cells(5, "B").resize(.rows.count, .columns.count) = .value
    end with
end with

with workSheets("Bonds")
    with .Range(.range(.cells(5, "B"), .cells(.rows.count, "B").end(xlup)), _
                .range(.cells(5, "B"), .cells(5, .columns.count).end(xltoleft)))
        zsm.cells(zsm.rows.count, "B").end(xlup).offset(1, 1).resize(.rows.count, .columns.count) = .value
    end with
end with

您确定最后一个偏移量应该是 offset(1, 1) 而不是 offset(1, 0)?

【讨论】:

  • 我想知道关于 (1,1) 偏移的同样的事情......似乎有点奇怪。
  • 是的,这很奇怪,因为我没有向您展示我的整个代码。对此我很抱歉。
  • 现在我编辑了这个问题。我希望这会有所帮助。非常感谢你! :)
  • 现在您只需用来自 Bonds 的值覆盖您从 Equities 获得的 ZSM 中的几乎所有数据。此外,您已使此响应完全无效。
  • 是的,这就是这个响应的作用。我想告诉你为什么我必须使用 offset(1,1)。正如我所说,我真的很了解这一点,但不知道我必须如何在 stackoverflow 中表现。对于给您带来的不便,我深表歉意。希望有人能帮忙
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
相关资源
最近更新 更多