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

Excel VBA执行End With语句后单元格值消失问题技术咨询

问题根因定位

  • 全列覆盖赋值冲突:嵌套循环中每次匹配到符合条件的M-CUST行时,都会对X、Y列所有数据行整体重新赋值,后序循环会直接覆盖前面所有行写入的结果,最终仅最后一次循环匹配的行能保留值,其余行内容都会被清空。
  • LastRow取值错误:你使用可见单元格计数的方式获取LastRow,这个值不等于实际数据的最大行号,赋值范围仅能覆盖前N行,超出范围的行不会写入任何值。
  • 隐式工作表引用:With块绑定Processed工作表,但代码中大量Range/Cells/Columns未加.前缀,默认引用活动工作表,一旦运行过程中工作表被切换,就会出现取值/赋值错位,导致目标单元格值为空。
  • 筛选状态遍历错位:循环过程中频繁切换筛选条件,可见行遍历范围未做显式绑定,极易出现遍历对象错位、取值错误的问题。

修复方案

  1. 取消循环内的全列赋值逻辑,每次仅给当前匹配行的对应单元格赋值:
' 替换原有全列赋值代码
.Range("X" & i.Row).FormulaR1C1 = sFmlHours
.Range("X" & i.Row).Value = .Range("X" & i.Row).Value
' Y列同理修改
  1. 修正LastRow取值逻辑,直接获取A列最后一行行号:
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
  1. 给With块内所有工作表对象引用前加.前缀,明确绑定Processed工作表,避免隐式引用错误。
  2. 建议先取消全局筛选,遍历所有行完成计算后再按需开启筛选,避免频繁切换筛选导致的逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:06:03