Excel VBA隐藏列表列移位

Excel VBA隐藏列表列移位,vba,excel,Vba,Excel,我对隐藏列有一个奇怪的问题。似乎只有当它们隐藏在代码中时才会发生,而不是手动。 鉴于此: ColA ColB ColC ColD 1 A 3 1 1 B 3 2 1 C 3 3 该列将被隐藏,但如果我随后在左侧添加列或删除列: lcTableCols("ColB").Delete 隐藏列“移动”,因此现在该表如下所示: ColA ColC 1 3

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

ColA ColB ColC ColD 1 A 3 1 1 B 3 2 1 C 3 3 该列将被隐藏,但如果我随后在左侧添加列或删除列:

lcTableCols("ColB").Delete
隐藏列“移动”,因此现在该表如下所示:

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

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

如果您也通过
entireclumn
删除,则行为与预期一致:

Columns(5).hidden = true
Columns(3).delete
lcTableCols("ColC").Range.EntireColumn.Hidden = True
lcTableCols("ColB").Range.EntireColumn.Delete

这里只有
A
D

列,我明白了!可以我想这是为了防止你有多张桌子在彼此下面或旁边。实际上,从表中删除的数据的同一列上的任何数据都必须保留。因此,实际上,该操作相当于从工作表中删除一系列“单元格”。这些单元格右侧的所有内容都会向左移动。由于Excel无法隐藏单个单元格,而是隐藏整列或整行,因此移动后的单元格将显示在可见列中。谢谢!有道理!我重新编辑了delete column公式以删除整列而不是表列。
lcTableCols("ColC").Range.EntireColumn.Hidden = True
lcTableCols("ColB").Range.EntireColumn.Delete