Excel VBA隐藏列表列移位

时间:2017-02-07 17:01:36

标签: vba excel-vba excel

我遇到了隐藏列的奇怪问题。只有当它们隐藏在代码中而不是手动隐藏时才会发生。 鉴于此:

ColA    ColB    ColC    ColD
1       A       3       1
1       B       3       2
1       C       3       3

如果我写

lcTableCols = ListObjects("Table1").listcolumns
lcTableCols("ColC").Range.EntireColumn.Hidden = True

该列将被隐藏,但如果我然后添加一列或删除左侧的列:

lcTableCols("ColB").Delete

隐藏列“移位”所以现在表格如下:

ColA    ColC
1       3       
1       3       
1       3       

现在隐藏了ColD。它只对列表列执行此操作。执行以下操作按预期工作:

Columns(5).hidden = true
Columns(3).delete

我只能假设它与“.Range.EntireColumn”有关。有什么更好的方法?我希望该函数能够隐藏命名列,我知道我可以用另一种方式(lcTableCol(“ColE”)。index)但我正在格式化一个大表,需要重构很多。这不是一个大问题,但我很好奇为什么会这样?

1 个答案:

答案 0 :(得分:1)

您正在隐藏EntireColumnC),然后仅从表中删除列(colD),而不是从工作表中删除。这是不明确的,删除​​只是移动表的列,但Excel必须保留“整个列”,因为它可能在表外有其他数据!

如果您也按EntireColumn删除,则行为符合预期:

lcTableCols("ColC").Range.EntireColumn.Hidden = True
lcTableCols("ColB").Range.EntireColumn.Delete

此处您只有AD列。