You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:25:29