将循环结果复制并粘贴到另一张工作表的一列中

问题描述 投票:0回答:1

这是我当前的代码,我想更改最后一行。

Dim Answer As VbMsgBoxResult
Answer = MsgBox("Did you refresh the model?", vbYesNo + vbQuestion + vbDefaultButton2)
If Answer = vbYes Then

Sheets("SITE Model").Range("C8").Value = 0
Sheets("SITE Model").Range("C6").Value = "DB"

For i = Sheets("NETWORK Model").Range("C8") To Sheets("NETWORK Model").Range("C9")
Sheets("SITE Model").Select
Range("C8").Select
ActiveCell.FormulaR1C1 = i
Sheets("NETWORK Model").Select
Range("D37:EF41").Select
Selection.Copy
Range("D27").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False


Sheets("NETWORK Model").Range("C62").CopySheets("SITE Model").Range ("K2")

我如何在下一个循环中向下改变范围(k2)?

谢谢!

excel vba for-loop copy-paste
1个回答
0
投票

您需要动态引用单元格K2,以便它随循环的每次迭代而变化。

包括一个新变量,然后将其用作行号。请记住要确保在循环结束之前先+1,这样当它跳回到下一次迭代的顶部时,变量将增加一,从而将行号向下移动。

示例:

Dim lRowNum As Long

  'Insert this line before the start of your loop.
  lRowNum = 2

  ' Replace your last line with these two lines.
  Sheets("NETWORK Model").Range("C62").CopySheets("SITE Model").Range ("K" & lRowNum)
  lRowNum = lRowNum + 1

一般要点:

不是使用.select.copy,而是有更有效的方法来引用所需范围并将其传输/复制到所需位置。我也强烈建议您始终使用工作表的前缀来限定.range语句。这将确保您的代码将始终在正确的工作表和正确的单元格区域上执行。例如,代替-

Sheets("NETWORK Model").Select
Range("D37:EF41").Select
Selection.Copy
Range("D27").Select
Selection.PasteSpecial...

您可以仅一行编写如下;

Sheets("NETWORK Model").Range("D27:EF31").Value = Sheets("NETWORK Model").Range("D37:EF41").Value

(我可能误解了您要将NETWORK Model范围复制到的确切位置,但这应该使您了解如何构造语句以更有效的方式完成相同的任务。当然,您可能更喜欢使用.select .copy.pastespecial,由您决定!)

© www.soinside.com 2019 - 2024. All rights reserved.