我在隐藏列方面遇到了一个奇怪的问题。这似乎只有当它们隐藏在代码中时才会发生,而不是手动发生。 鉴于此:
ColA ColB ColC ColD 1 A 3 1 1 B 3 2 1 C 3 3
If I write
lcTableCols = ListObjects("Table1").listcolumns
lcTableCols("ColC").Range.EntireColumn.Hidden = True
该列将被隐藏,但如果我随后添加一列或删除左侧的一列:
lcTableCols("ColB").Delete
隐藏列“移动”,因此现在表格如下所示:
ColA ColC 1 3 1 3 1 3
With ColD now hidden. It only does this with list columns. Doing the following works as expected:
Columns(5).hidden = true
Columns(3).delete
我只能假设它与“.Range.EntireColumn”有关。更好的方法是什么?我希望该函数能够隐藏命名列,并且我知道我可以用另一种方式来实现(lcTableCol("ColE").index),但我正在格式化一张大表,并且需要进行大量重构。这不是一个大问题,但我很好奇为什么会发生这种情况?
最佳答案
您隐藏了一个EntireColumn
(C
),然后仅从表中而不是从工作表中删除列 (colD)。这是不明确的,删除只是移动了表的列,但 Excel 必须保留“整个列”,因为它可能有表外的其他数据!
如果您还通过 EntireColumn
进行删除,则行为符合预期:
lcTableCols("ColC").Range.EntireColumn.Hidden = True
lcTableCols("ColB").Range.EntireColumn.Delete
这里只有 A
和 D
列。
关于vba - Excel VBA 隐藏列表列移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42095732/