vba - Excel VBA 隐藏列表列移位

标签 vba excel

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

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

这里只有 AD 列。

关于vba - Excel VBA 隐藏列表列移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42095732/

相关文章:

excel - 从 Excel 关闭 PowerPoint 中的显示警报

c# - 选择给定选定单元格的整行

excel - 有没有办法完全限定 VBA 函数的使用?

vba - 将多个 Excel 工作簿合并为一个包含多个工作表的工作簿

excel - 将字符串值传递给函数并返回集合对象 VBA

vba - 如何在 Excel VBA 中使用地址功能?

python - 为什么有些 .xlsx 文件可以用 openpyxl 成功打开,而有些则打不开?

excel - 基于先前结果的条件结果

Excel 2010 : Replace a table by an external connection without impacting other sheets

vba - 通过vba将具有数据列的行转换为Excel 2003中具有多行的列