【问题标题】:VBA code using "Cells(Rows.count).Row).End(xlUp)" fails after 263 iterations使用“Cells(Rows.count).Row).End(xlUp)”的 VBA 代码在 263 次迭代后失败
【发布时间】:2016-01-12 19:25:04
【问题描述】:

我正在使用以下形式的 Sub:

If Not Intersect(Target, Sheets("Sheet1").Range("A1")) Is Nothing Then (+ code)

结合:

Sheets("Sheet2").Range ("A1" & Cells(Rows.Count).Row).End(xlUp).Offset(1, 0).Value = Sheets("Sheet1").Range("A1").Value

意图将数据从 Sheet1 上频繁更改的单元格(例如 A1)复制到 Sheet2 上的列(例如 A:)。

这在前 263 次迭代中运行良好(无论时间间隔如何,它始终为 263),但是在第 264 次,它不会将下一个值复制到列中的下一个空单元格,而是不断覆盖单元格 A2。这很不幸,因为我需要记录至少 600 个值。

我在 Windows 10 下使用 Excel 2013。

【问题讨论】:

  • 您需要包含循环的实际机制 - 您拥有的代码不会显示错误的位置。包括包含问题的 Sub 的整个部分。
  • 不应该是Sheets("Sheet2").Range ("A" & Cells(Rows.Count).Row).吗?我不明白“A”后面的“1”。
  • 我同意 iDevlop,应该只是“A”

标签: vba excel


【解决方案1】:

应该是:

Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Value = Sheets("Sheet1").Range("A1").Value

仅使用一个参数获取Cells(Rows.Count) 不会将您带到A 列的底部单元格,因为Cells() 将在移动到下一行之前水平计数项目。经过一些操作后,您将退回到已使用的区域。

【讨论】:

  • 在更正后的代码中,赋值语句左侧的初始目标单元格在哪里? (在我的例子中,A1)。
  • @A.Johnson 据我了解您的操作,您想从 Sheet1/A1 复制到 Sheet2/A 列中的第一个空单元格中。上面就是这样做的。我可能误解了你的要求。
  • 抱歉,我以A1为例。在实际代码中,在工作表之间复制了许多原始单元格。 Sheet1 上 P8、Q8、R8 等中的值被传递到 Sheet2 上的各个列,其最上面的单元格是 C4、D4、E4 等。
  • 以上代码更正了您输入263次后出现的错误。如果您的 Worksheet_Change 事件编写正确但只有这个错误,就像在 OP 中一样,我认为如果您应用这个更正的(想法)它将起作用。 :)
  • 确实如此。改编后的代码完美运行。我的一部分仍然想知道为什么原始代码在 263 次迭代后失败。但人生苦短……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多