请求协助排查VBA添加全边框代码的行数异常问题
问题分析与解决方案
你遇到的行数异常问题,核心原因是单元格区域拼接错误,我们来一步步拆解和修复:
1. 错误根源
看你代码里的这行关键代码:
Set AllRange = Range("A2:I2" & LastRow)
当LastRow = 361时,这个表达式会拼接成Range("A2:I2361")——相当于从A2一直延伸到I列的第2361行,这完全不是你想要的范围!你真正需要的是从A2到I列的第LastRow行,正确的拼接逻辑应该是Range("A2:I" & LastRow)。
另外还有一个潜在隐患:你用了Rows.Count而不是FO.Rows.Count,如果当前激活的工作表不是"Final Order",Rows.Count会取当前工作表的行数,可能导致LastRow计算偏差(不过这次的核心问题还是区域拼接错误)。
2. 修正后的完整代码
Sub Draw_Borders() Dim FO As Worksheet Dim LastRow As Long Dim AllRange As Range Set FO = ThisWorkbook.Worksheets("Final Order") ' 改用FO.Rows.Count确保取目标工作表的总行数,避免跨工作表偏差 LastRow = FO.Cells(FO.Rows.Count, 1).End(xlUp).Row ' 修正区域拼接逻辑:A2到I列的LastRow行 Set AllRange = FO.Range("A2:I" & LastRow) With AllRange.Borders .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = 0 .TintAndShade = 0 End With End Sub
3. 关于空行删除后仍异常的补充说明
你提到之前删除过空行但问题依旧,除了上面的拼接错误外,还可以检查A列是否存在看不见的内容(比如空格、换行符、公式返回的空文本):
- 选中A列,按
Ctrl+G打开定位窗口,选择「定位条件」→「空值」,看看是否有看起来为空但实际有隐藏内容的单元格。 - 如果是公式返回空值导致
End(xlUp)判断不准,可以用更精准的行号获取方式:LastRow = FO.Cells(FO.Rows.Count, 1).Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
内容的提问来源于stack exchange,提问作者Nikita
相关产品推荐
相关产品推荐

