【问题标题】:Excel VBA: Copy a single row into another worksheet while the copying offsets down by one each timeExcel VBA:将单行复制到另一个工作表中,而每次复制偏移量减少一个
【发布时间】:2019-08-27 04:35:09
【问题描述】:

我今天刚开始学习 VBA,完全是菜鸟。我基本上只是按照这个人的指示做了奇迹:www.excelcampus.com/vba/copy-paste-another-workbook/。但是,现在我想反过来做。这意味着从 Sheet1 复制“A2:IG2”并将其粘贴到“A2:IG2”Sheet2,然后复制“A3:IG3”并将其粘贴到“A2:IG2”Sheet2。我想保持这个循环,直到我从 Sheet1 复制了所有值。

Sub Copy_Paste_Below_Last_Cell()
'Find the last used row in both sheets and copy and paste data below existing data.

  'Open method requires full file path to be referenced.
  Workbooks.Open "C:\Users\xxxx\OneDrive\Desktop\Sheet2.xlsx"

Dim wsCopy As Worksheet
Dim wsDest As Worksheet
Dim lCopyLastRow As Long
Dim lDestLastRow As Long

  'Set variables for copy and destination sheets
  Set wsCopy = Workbooks("Sheet2.xlsx").Worksheets("Sheet2")
  Set wsDest = Workbooks("Sheet1.xlsx").Worksheets("Sheet1")

  '1. Find last used row in the copy range based on data in column A
  lCopyLastRow = wsCopy.Cells(wsCopy.Rows.Count, "A").End(xlUp).Offset(1).Row

  '2. Find first blank row in the destination range based on data in column A
  'Offset property moves down 1 row
  lDestLastRow = wsDest.Cells(wsDest.Rows.Count, "A").End(xlUp).Row

  '3. Copy & Paste Data
  wsCopy.Range("A2:IG2" & lCopyLastRow).Copy _
    wsDest.Range("A" & lDestLastRow)
  Workbooks("Sheet2").Close SaveChanges:=True
End Sub

上面的代码是一个我认为可以工作的修改版本,但它不是专门复制“A2:IG2”,而是复制范围 A:IG 和偏移行上的所有可用日期。

【问题讨论】:

  • 你想继续循环直到什么时候?或什么条件?请编辑问题并添加具体问题的描述。
  • 仅供参考 有一个名为 Sheet1/Sheet2...Workbook 有点令人困惑
  • 请澄清一下,您是否尝试在 sheet2 中重写范围?就像您在问题中所说的那样...copying "A2:IG2" from Sheet1 and pasting it to "A2:IG2" Sheet2 and then copying "A3:IG3" and pasting it to "A2:IG2" Sheet2.,或者您是否尝试在 sheet1 中复制多行并将它们粘贴到 sheet2?
  • @BruceWayne- 抱歉哈哈。
  • @GMalc- 不,它不是多行。就一排。您会看到,在它从 Sheet1 复制行之后,工作簿 Sheet2 将关闭。我使用 Sheet2 上的复制行将其加载到单独的第三方程序中,然后再次加载代码,打开 Sheet2 以复制 Sheet1 中的下一行数据。

标签: excel vba


【解决方案1】:

只改变最后一部分

'3. Copy & Paste Data
wsCopy.Range("A2:IG2").Copy _
wsDest.Range("A" & lDestLastRow + 1)
Workbooks("Sheet2").Close SaveChanges:=True

【讨论】:

  • 嗯,它确实复制了我最初想要的内容,但之后并没有偏移到下一行。我的意思是所有改变的是 lCopyLastRow。尽管如此,谢谢,我想我会尝试解决这个问题。
  • 嗯,我的意思是在从 Sheet1 上的复制范围复制之后偏移到下一行,而不是在 Sheet2 上的目标上进行编辑偏移。不过我会尝试一下,看看它会去哪里哈哈
  • 你的代码在粘贴之后什么都不做,那么为什么你需要在 sheet1 上进行偏移?我将 +1 添加到 Sheet2 目标以将值粘贴到第一个空单元格中:)
  • 说来话长。你看,我需要一个程序的 Sheet2(我们称之为 SM),它只需要那一行数据,所以没有在目标上抵消它。因此,在我将 Sheet1 中的数据粘贴到 Sheet2 之后,我使用 SM 来利用粘贴的数据,然后我需要 Sheet1 下面的下一行,这就是为什么我需要选择偏移量,这样我就可以使过程自动化位。
  • 首先,我刚刚发现你弄错了最后一行公式,正确的顺序应该是: lCopyLastRow --> wsDest lDestLastRow --> wsCopy 根据你的变量描述。仍然知道范围 A2:IG2 下一行是 3,所以它很容易,如果你想做一个循环,只需执行 "A2:IG"&i 或 "A"& i & ":IG" & i
猜你喜欢
  • 2016-11-19
  • 2013-10-26
  • 1970-01-01
  • 2019-05-02
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多