如何用Autofill复制最后预填充单元格?VBA代码Range报错求助
VBA日期列自动填充问题修复
问题分析
你的代码存在两个核心问题导致Range报错:
Atualizar_过程中,Autofill的目标范围格式错误:你写的Range("AA" & Cells(Rows.Count, "y").End(xlDown).Row)既没有指定完整的连续范围(仅单个单元格),还错误地引用了"y"列(需参照的是A列最后一行)。Autofill要求目标范围必须包含源单元格,且为连续区域。- 原代码大量使用
Select和Selection操作,不仅运行效率低,还容易因选区变动触发意外错误。
修正后的完整代码
Sub sub_() Call Atualizar_ME5A Application.Wait Now + TimeValue("00:00:03") Call Atualizar_ End Sub Sub Atualizar_ME5A() ' 直接将AE2的值写入AA列最后一行的下一行,避免冗余的Select操作 Dim lastRowAA As Long lastRowAA = Range("AA2").End(xlDown).Row Range("AA" & lastRowAA + 1).Value = Range("AE2").Value End Sub Sub Atualizar_() Dim sourceCell As Range Dim targetLastRow As Long Dim targetRange As Range ' 获取AA列最后一个已填充的单元格(作为填充源) Set sourceCell = Range("AA2").End(xlDown) ' 获取A列最后一行的行号(作为填充的终点) targetLastRow = Cells(Rows.Count, "A").End(xlUp).Row ' 定义自动填充的完整目标范围:从源单元格到AA列对应A列最后一行的位置 Set targetRange = Range(sourceCell, "AA" & targetLastRow) ' 使用xlFillCopy类型执行自动填充,确保完全复制源单元格内容 sourceCell.AutoFill Destination:=targetRange, Type:=xlFillCopy End Sub
关键修正说明
- 移除所有
Select/Selection操作,直接通过Range对象赋值,提升代码稳定性与运行速度。 - 正确定义Autofill目标范围:必须包含源单元格,终点为AA列与A列最后一行对应的行。
- 明确指定
Type:=xlFillCopy参数,严格按复制模式填充日期内容。 - 修正参照列错误:将"y"列改为需求中的A列,匹配“对应A列最后一行”的要求。
内容的提问来源于stack exchange,提问作者Kevin Rodrigues
相关产品推荐
相关产品推荐

