【问题标题】:How to change destination ranges when using autofill in VBA在 VBA 中使用自动填充时如何更改目标范围
【发布时间】:2020-07-30 16:06:25
【问题描述】:

我对 VBA 很陌生,我正在制作一个宏,它将数据从“Sample”工作簿复制到“Etracker”工作簿。将单元格“H11”从“Sample”复制到 Etracker 中 C 列的最后一行后,我希望 C 列自动填充到 J 列中的数据位置。该代码有效,但现在它说“C16926”,它每次都会改变,因为我不断地向其中输入数据。所以我想一直从C列的最后一行自动填充它。 我尝试了不同的方法来改变“C16926”,但它似乎不起作用。 请帮忙!并提前致谢。

LastrowC = Etracker.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Row
LastrowJ = Etracker.Cells(Rows.Count, 10).End(xlUp).Offset(1, 0).Row

Sample.Activate
Range("H11").Copy
Etracker.Cells(LastrowC, 3).PasteSpecial xlPasteValues
Etracker.Activate
Etracker.Range("C" & LastrowC).Select
Selection.AutoFill Destination:=Range("C16926:C" & Range("J" & Rows.Count).End(xlUp).Row), Type:=xlFillCopy

【问题讨论】:

  • 您需要解释您期望C16926 是什么?如果您不告诉我们,我们无法知道它应该更改为什么。 • 您可能会从阅读How to avoid using Select in Excel VBA 中受益。
  • 我想将“C16926”更改为C列中的最后一个数据。换句话说,我希望这个宏选择C列中的最后一个数据并自动填充到最后一个数据在J中的位置列。

标签: excel vba autofill


【解决方案1】:

您只需要将最后一行连接到地址中,例如

"C" & LastrowC & ":C" & Range("J" & Rows.Count).End(xlUp).Row)

请注意,如果您为每个 RangeCellsRowsColumns 对象指定工作表,则不需要.Select.Activate。使用.Select.Activate 非常不可靠,并且会使您的代码非常慢。

所以你应该得到类似的东西

Dim LastRowC As Long
LastrowC = Etracker.Cells(Etracker.Rows.Count, "C").End(xlUp).Offset(1, 0).Row

Dim LastrowJ As Long
LastrowJ = Etracker.Cells(Etracker.Rows.Count, "J").End(xlUp).Offset(1, 0).Row

Sample.Range("H11").Copy
Etracker.Cells(LastrowC, "C").PasteSpecial xlPasteValues

Etracker.Range("C" & LastrowC).AutoFill Destination:=Etracker.Range("C" & LastrowC & ":C" & LastrowJ), Type:=xlFillCopy

【讨论】:

  • 我正在使用 LastrowJ 来查找 lastrow 的位置,当我将内容从 'sample' 复制到 'Etracker' 中的 J 列,然后在复制 J 列之后,我想将 C 列自动填充到最后一个数据的位置在 J 列中。但是,当我使用 "C" & LastrowC & ":C" & Range("J" & Rows.Count).End(xlUp).Row) 时,我可以看到它是如何工作的,由于某种原因, Range("J " & Rows.Count).End(xlUp).Row 抓取随机数第 23 行,你知道它为什么会这样做吗?谢谢
  • 补充一点:当我执行从那张纸
  • 因为如果您只使用Range,那么 Excel 将无法知道在哪个工作表中查找并且它会猜测。因此,您始终需要指定一个工作表(正如我在回答的第二句话中所写的那样)。如果您使用 Etracker.Range,则 Excel 知道在工作表 Etracker 中查找该范围。确保始终告诉 VBA 范围在哪个工作表中。否则您可能会得到随机结果。
  • 我明白了,现在效果很好,非常感谢您的帮助。还有一件事要问,当连接范围时,不确定何时使用“”,你能澄清那部分吗?
  • 不太清楚你的意思,但所有文本/字符串都必须包含在" " 中,所有应该被视为变量/对象的东西都必须没有它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2019-05-05
相关资源
最近更新 更多