You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

VBA宏填充VLOOKUP公式故障求助:新增列公式无法生效

解决VBA中VLOOKUP公式填充的问题

让我们一步步排查你的问题,主要有几个关键点需要修正:

问题根源分析

  1. 行数计算时机错误:你先计算了rws = Cells(Rows.Count, "D").End(xlUp).Row,但这时候还没切换到最后一个工作表,所以取的是当前活动工作表的D列行数,不是目标工作表的,导致公式填充范围完全不对。
  2. 公式分隔符不兼容:在VBA中编写Excel公式时,不管你的系统区域设置用分号还是逗号,VBA统一要求用**逗号(,)**作为参数分隔符,你用了分号会导致公式无法被正确识别。
  3. 依赖Select的风险:使用Sheets(Sheets.Count).Select容易因为活动工作表意外变化而出错,直接引用工作表对象的写法更稳定可靠。

修正后的代码

Sub ColumnInsert()
    Dim targetSheet As Worksheet
    Dim lastRow As Long
    
    ' 直接绑定最后一个工作表,避免使用Select
    Set targetSheet = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    
    ' 在目标工作表插入D列并设置表头
    targetSheet.Range("D:D").EntireColumn.Insert
    targetSheet.Range("D1").Value = "BOX Number"
    
    ' 获取目标工作表C列的最后一行(新插入的D列无数据,基于关联的C列取有效行数更准确)
    lastRow = targetSheet.Cells(targetSheet.Rows.Count, "C").End(xlUp).Row
    
    ' 填充VLOOKUP公式,注意用逗号作为参数分隔符
    targetSheet.Range("D2:D" & lastRow).Formula = "=VLOOKUP(C2,Output!$A:$B,2,FALSE)"
End Sub

额外说明

  • 我把行数计算改成了基于C列,因为新插入的D列原本是空的,而你的VLOOKUP是引用C列的值,用C列的有效行数来确定填充范围更合理。
  • 直接绑定targetSheet对象后,所有操作都明确指向目标工作表,彻底避免了活动工作表变化带来的错误。
  • 如果你的Output工作表名包含空格或特殊字符,可以把公式里的表名加回单引号:"=VLOOKUP(C2,'Output'!$A:$B,2,FALSE)"

内容的提问来源于stack exchange,提问作者G_TTI

火山引擎 最新活动