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

Excel VBA中Range赋值O列触发1004运行时错误求助

问题排查与解决思路

针对你遇到的仅在读取O列数据写入C列时触发Run-time error '1004'的情况,结合代码和场景,常见原因及解决方法如下:

1. 工作表保护或O列单元格锁定

这是最常见的触发原因:

  • 检查Sheet18是否处于保护状态:右键工作表标签,若显示"撤销工作表保护"选项,说明表被保护。即便其他列能正常读写,O列可能被单独设置为锁定状态,导致读取或写入时触发权限错误。
  • 解决:先撤销工作表保护(有密码需输入对应密码),或者在代码开头添加Sheet18.Unprotect Password:="你的密码",结尾添加Sheet18.Protect Password:="你的密码"(需要保持表保护时使用)。

2. O列存在合并单元格

如果Range("O" & i)对应的单元格是合并区域的一部分,直接引用赋值会因范围不匹配报错:

  • 检查O列第i行单元格是否和其他单元格合并,若有,修改代码为读取合并区域的左上角单元格值:
Sheet18.Range("C" & j) = Sheet18.Range("O" & i).MergeArea.Cells(1,1).Value

3. O列单元格包含数组公式或特殊数据验证

若O列单元格使用了数组公式,或设置了限制读取的特殊数据验证规则,可能导致读取值时出错:

  • 暂时清空O列第i行的数组公式或数据验证,测试代码是否正常运行,再针对性调整规则。

4. 变量类型溢出风险(次要)

代码中用Integer类型存储行号,当行数超过32767时会溢出报错。虽然目前其他列正常,但建议将i、j、blankCount的类型改为Long,避免后续隐藏问题:

Dim i As Long
Dim j As Long
Dim blankCount As Long

临时测试方案

可以先将读取O列的代码替换为常量赋值,比如Sheet18.Range("C" & j) = "测试值",如果运行正常,说明问题确实出在O列的单元格属性上,而非代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:30:22