VBA实现固定列数逐行合并单元格报错(Error 1004)求助
VBA逐行合并B-G列单元格的错误修正
原代码存在的核心问题
- 变量
firstcell和lastcell在循环外赋值,此时i未初始化(默认值为0),且循环中未重新更新范围,导致每次合并的都是同一固定区域,这是触发1004错误的关键原因之一。 lastrow计算逻辑错误:Range("B2").End(xlUp).Row会向上查找空行,得到的是B列最上方非空行的行号,而非实际数据的最后行号。Selection.Merge (arrow)是语法错误,arrow为无效标识,合并单元格直接调用.Merge方法即可。- 依赖
Activate和Select操作单元格,这类操作容易因工作表焦点变化引发1004错误,直接通过对象引用操作更稳定。
修正后的代码
Sub MergeRowsBG() Dim ws As Worksheet Dim lastRow As Long Dim i As Long ' 直接指定目标工作表,避免依赖Activate操作 Set ws = ThisWorkbook.Sheets("Tabelle1") ' 正确获取B列最后一行数据的行号 lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row ' 从第14行开始到最后一行,逐行处理B到G列 For i = 14 To lastRow With ws.Range(ws.Cells(i, "B"), ws.Cells(i, "G")) ' 先取消已有合并(如果存在) .MergeCells = False ' 设置单元格格式 .HorizontalAlignment = xlTop .VerticalAlignment = xlLeft .WrapText = True .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext ' 执行合并操作 .Merge End With Next i End Sub
关键修正说明
- 直接绑定工作表对象
ws,所有单元格操作都基于该对象,彻底避免激活/选择带来的错误。 - 修正
lastRow计算方式:从B列最后一行向上查找,确保获取到真实的最后数据行号。 - 循环内每次重新定义当前行的B-G列范围,保证每行都被正确处理。
- 用
With语句直接操作单元格范围,无需Select,大幅提升代码稳定性。 - 修正对齐方式错误:原代码中的
xlUp不存在,替换为合法的xlTop表示水平顶端对齐。
内容的提问来源于stack exchange,提问作者MyNameIs
相关产品推荐
相关产品推荐

