我遇到了隐藏列的奇怪问题。只有当它们隐藏在代码中而不是手动隐藏时才会发生。 鉴于此:
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)但我正在格式化一个大表,需要重构很多。这不是一个大问题,但我很好奇为什么会这样?
答案 0 :(得分:1)
您正在隐藏EntireColumn
(C
),然后仅从表中删除列(colD),而不是从工作表中删除。这是不明确的,删除只是移动表的列,但Excel必须保留“整个列”,因为它可能在表外有其他数据!
如果您也按EntireColumn
删除,则行为符合预期:
lcTableCols("ColC").Range.EntireColumn.Hidden = True
lcTableCols("ColB").Range.EntireColumn.Delete
此处您只有A
和D
列。