Excel 在VBA中使用自动填充时如何更改目标范围

Excel 在VBA中使用自动填充时如何更改目标范围,excel,vba,autofill,Excel,Vba,Autofill,我是VBA新手,我正在制作一个宏,它将数据从“示例”工作簿复制到“Etracker”工作簿。将单元格“H11”从“Sample”复制到Etracker中C列的最后一行后,我希望C列自动向下填充,直到数据位于J列中。代码是有效的,但是现在代码上写着“C16926”的地方,它每次都会改变,因为我不断地向其中输入数据。所以我想一直从C列的最后一行自动填充它。 我尝试了不同的方法来改变“C16926”,但它似乎不起作用。 请帮忙!先谢谢你 LastrowC = Etracker.Cells(Rows.C

我是VBA新手,我正在制作一个宏,它将数据从“示例”工作簿复制到“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

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

"C" & LastrowC & ":C" & Range("J" & Rows.Count).End(xlUp).Row)
请注意,如果为每个范围
单元格
对象指定工作表,则无需
。选择
。激活
。使用
.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

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

"C" & LastrowC & ":C" & Range("J" & Rows.Count).End(xlUp).Row)
请注意,如果为每个范围
单元格
对象指定工作表,则无需
。选择
。激活
。使用
.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

您需要解释您期望的是什么
C16926
?如果你不告诉我们,我们无法知道它应该变成什么您可能会从阅读中受益。我希望将“C16926”更改为C列中的最后一个数据。换句话说,我希望此宏选择C列中的最后一个数据,并自动填充到J列中最后一个数据的位置。您需要解释您期望的
C16926
是什么?如果你不告诉我们,我们无法知道它应该变成什么您可能会从阅读中受益。我想将“C16926”更改为C列中的最后一个数据。换句话说,我希望此宏选择C列中的最后一个数据并自动填充到J列中最后一个数据所在的位置。当我将内容从“sample”复制到“Etracker”中的J列时,我使用LastrowJ查找lastrow所在的位置,然后在复制J列后,我希望将C列自动填充到J列中最后一个数据所在的位置。但是,当我使用“C”&LastrowC&“:C”&Range(“J”&Rows.Count).End(xlUp.Row),出于某种原因,Range(“J”&Rows.Count).End(xlUp).Row抓取ramdom第23行,你知道为什么吗?感谢添加:我实现了范围(“J”&Rows.Count)。结束(xlUp)。当我执行从“样本”工作表复制数据时,行会更改并从“样本”工作表中获取最后一个单元格,因为如果您仅使用
Range
,Excel将无法知道在哪个工作表中查看并猜测。因此,您需要始终指定一个工作表(如我在回答的第二句中所述)。如果使用
Etracker.Range
,则Excel知道在工作表
Etracker
中查找该范围。确保始终告诉VBA该范围所在的图纸。否则你可能会得到随机结果。我明白了,现在它工作得很好,非常感谢你的帮助。还有一件事要问,当连接范围时,不确定何时使用“”,您能否澄清该部分?不确定您的确切意思,但所有文本/字符串都必须包含在
应该被视为变量/对象的所有内容都必须没有它们。当我在“Etracker”中将内容从“sample”复制到J列时,我使用LastrowJ查找lastrow所在的位置,然后在复制J列后,我想将C列自动填充到J列中最后一个数据所在的位置。但是,当我使用“C”&LastrowC&“:C”&Range(“J”&Rows.Count).End(xlUp.Row),出于某种原因,Range(“J”&Rows.Count).End(xlUp).Row抓取ramdom第23行,你知道为什么吗?感谢添加:我实现了范围(“J”&Rows.Count)。结束(xlUp)。当我执行从“样本”工作表复制数据时,行会更改并从“样本”工作表中获取最后一个单元格,因为如果您仅使用
Range
,Excel将无法知道在哪个工作表中查看并猜测。因此,您需要始终指定一个工作表(如我在回答的第二句中所述)。如果使用
Etracker.Range
,则Excel知道在工作表
Etracker
中查找该范围。确保始终告诉VBA该范围所在的图纸。否则你可能会得到随机结果。我明白了,现在它工作得很好,非常感谢你的帮助。还有一件事要问,当连接范围时,不确定何时使用“”,您能否澄清该部分?不确定您的确切意思,但所有文本/字符串都必须包含在
中,所有应视为变量/对象的内容都必须不包含它们。