VBA使用ListObjects调整Excel表格尺寸效果不符合预期求助
问题原因
Excel的列表对象(ListObject)执行Resize操作缩小范围时,只会调整表格本身的生效范围,不会自动清除原有更大范围内已经应用的表格样式、边框等单元格格式,你看到的C列残留边框就是调整前的表格遗留的格式。
你的原有代码还存在冗余的Select操作,容易因为激活工作表变化导致运行异常,同时没有兼容表格仅存在标题行的场景,运行时可能报错。
修正后代码
Sub Table_Resize() Dim tbl As ListObject Dim oldRng As Range Dim clearRng As Range ' 直接绑定目标表格,无需选中工作表 Set tbl = Sheet2.ListObjects("MyTable") ' 记录调整前的表格完整范围,用于后续清理残留格式 Set oldRng = tbl.Range ' 清空表格数据,兼容无数据行的场景避免报错 If Not tbl.DataBodyRange Is Nothing Then tbl.DataBodyRange.ClearContents End If ' 调整表格为2行10列(对应B5:K5的10列表题+1行空数据行) tbl.Resize tbl.Range.Resize(2, 10) ' 清理原表格范围残留的格式 If oldRng.Address <> tbl.Range.Address Then ' 清理多余区域的边框和格式 Set clearRng = Application.Intersect(oldRng, oldRng.Parent.UsedRange) If Not clearRng Is Nothing Then clearRng.Borders.LineStyle = xlLineStyleNone clearRng.ClearFormats End If ' 恢复新表格的样式,避免清理操作影响当前表格格式 tbl.TableStyle = tbl.TableStyle End If End Sub
补充说明
如果你的表格使用的是自定义样式,可以将代码中tbl.TableStyle = tbl.TableStyle替换为对应的自定义样式名称即可。
内容的提问来源于stack exchange,提问作者Seema
相关产品推荐
相关产品推荐

