【问题标题】:Macro Copy&Paste宏复制粘贴
【发布时间】:2015-02-10 05:01:21
【问题描述】:

我正在尝试创建一个宏,它将数据从一个工作表复制并放入另一个工作表。我可以毫无问题地做到这一点。但是,当我想在另一行中使用相同的宏时,我遇到了问题。基本上我想要做的是从 sheet1 复制单元格 D11 并将其放在 sheet2 上的单元格 B4 中,等等(我正在做的显然比这更复杂,但这并不重要)。

我的问题是,当我现在想运行此宏并从 sheet1 复制单元格 D12 并粘贴到 sheet2 上的 B5 时,粘贴的值会跳转到 B4。我知道发生这种情况是因为 VBcode 说要粘贴复制的值。

我的问题是如何将它粘贴到我选择的任何行中?也许基于我选择的行/单元格。

当前代码,通过录制宏编写

Sheets("sheet1").Select
Range("D11").Select
Selection.Copy
Sheets("sheet2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
  :=False, Transpose:=False
Range("B4").Select

我假设最后一行是我需要进行更改的地方,但我不确定要更改什么。 谢谢!非常感谢任何和所有帮助。

【问题讨论】:

  • 是的,如果您只想使用选定的单元格并使其相对于行(假设您想从 12-5=7 开始将粘贴偏移 7 行),那么您目前已经硬编码了所有内容你可以有Selection.Copy 然后Sheets("sheet2").Range("B" & Selection.Row-7).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
  • 你是对的,以及其他评论。但是,我不会像这样接近它。一旦您进入 VBA 并使用代码,而不仅仅是录制宏,您将希望避免使用 Select Statements 来移动和复制数据。看看这个问答:stackoverflow.com/questions/10714251/…
  • 如果您可以发布更多关于您要完成的任务的上下文,那么可能有一种更简单、更优雅的编码方式。或者也许只是更适应未来的需求。否则,评论中提供的解决方案是正确的。

标签: vba excel


【解决方案1】:

作为一般规则,尽量避免选择复制粘贴(详细讨论见:"Application.Calculation = xlCalculationManual" statement causing run-time error 1004 in VBA Copy-Paste procedure)。相反,使用直接复制语句,这将解决您的问题并显着提高性能:

清单 1。

Sub DirectCopySample()
    Application.ScreenUpdating = False
    Sheets("Sheet1").Range("D11").Copy Destination:=Sheets("Sheet2").Range("B5")
    Application.ScreenUpdating = True
End Sub

清单 1 中的 Sub 执行从 Cell:Sheets("Sheet1").Range("D11") 直接复制到 cell:Sheets("Sheet2").Range("B5")

此外,您的初始 Copy-Paste Sub 可以简化(它也可以工作,尽管清单 1 是首选)

清单 2。

Sub CopyPasteSample()
    Sheets("sheet1").Range("D11").Copy
    Sheets("sheet2").Range("B5").PasteSpecial Paste:=xlPasteValues
End Sub

希望这会有所帮助。最好的问候,

【讨论】:

  • @ThatGuy17:如果您对答案感到满意,请标记为已接受?谢谢和问候,
【解决方案2】:

您似乎录制了一个宏并正在尝试重播它。这是一个真正的 VBA 代码(不是宏录制类型):

Sheets("sheet2").Range("B5") = Sheets("sheet1").Range("D11").Value

这就是全部!

顺便说一句,您的困境来自 PasteSpecial 方法复制到当前选定的单元格的事实。您已尝试多次运行此宏,并且 Range("B4").Select 行成功了。如果您坚持您的方法,请在 PasteSpecial 之前插入 Range("B5").Select

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多