首页 > 解决方案 > 更新 Excel ListObject 标题名称而不破坏枢轴

问题描述

我有一张 Excel 表格,上面有一张很宽的桌子。由于开发人员的友好性,我想使用某种风格的列标题命名(很像正确的匈牙利表示法),我在每个标题名称后加上“列类型”标签。这让我可以很容易地发现比较苹果和橙子的地方。还有基于此表的数据透视表报告。

一个例子来说明这一点:假设您有 2 个货币列,A 列以 B 列以外的另一种货币表示。因此,该模型不应在未先应用适当汇率的情况下将它们组合起来。为了发现这一点,我将这些列命名为Earned - Cur1Saved - Cur2。任何类似的计算=[@[Earned - Cur1]] + [@[Saved - Cur2]]都是非法的,但由于有标签,这可以在审计中轻松获取。我已经使用了几个这样的标签组,它们已经防止了一些错误的出现。

然而...

该文件还需要分发给许多不那么精通的最终用户,他们需要填写此表并参考一些结果列。我们已经隐藏了大多数中间列,但列名现在远非用户友好(例如:Actual - NK/Q1/EC/%请填写?)。

这需要在 Excel 2010 中运行。

我有哪些选择?

选项 1 在表格上方添加一个额外的行,将人类可读的名称放入其中,然后隐藏表格标题行。这可行,但不是用户不能再对表格进行排序和过滤,所以这是不行的。

选项 2 通过在每个列名称前添加换行符来增加选项 1,并使表头行 1 字符高。标题单元格仍将用于驱动排序和过滤,并且用户在上面的行中具有人类可读的名称。实际的标题单元格看起来像“空”按钮。可以工作,但是由于列名中的所有换行符遍布整个地方,复杂的公式变得不可读。

选项 3 添加一个宏,通过表格上方另一行中的替代标题来切换表格中的标题。宏应该在将文件发送给用户之前运行,并在他们返回它们时再次运行。我很高兴地将这个选项编码到文件中,而且效果非常好!但后来我意识到这(以及选项 2)破坏了所有派生的数据透视表,因为 Excel 通过表中使用的名称链接数据 - 更新名称,并且数据透视表的那部分将被删除......

当我们自己处理文件时,我真的很喜欢在其中包含我们面向开发的列名的选项,但能够在需要时切换标题。当然,无需在每次此类切换后重建所有枢轴。

这里的一个开端是枢轴似乎只在它们被刷新后才删除列。我可以使用它来更新标题名称,然后在枢轴上做一些魔术来重新映射它们的字段,然后才刷新它们,但似乎在 VBA 中没有办法实现这一点(PivotField.SourceName只读)。

希望有人能想到一个替代方案,或者我是 SOL?我完全愿意接受其他解决方法。

解决方法 1 在标题名称中插入以空值结尾的字符,以便它们不会正常显示在公式中,但不会显示在表标题行中。要是这么简单就好了……原来 Excel 会从 a 中抛出=Char(0)&"abc",并且(标签任何人?)之类的东西=Char(8)&"abc"在粘贴到标题单元格时会给出 Unicode 替换字符……(?)

解决方法 2 最后的手段似乎是解压缩 excel 文件,然后浏览 xml 数据以一次性更新所有内容,然后重新压缩文件。但是这段代码也需要由不太熟练的用户执行,而且我看到太多的 if 和 buts 让我觉得使用这个设置很安全。

解决方法 3 现在我只使用选项 2 的变体;我有一些 VBA 可以“清空”标题单元格,而不是在它们前面加上换行符。“清空”是指将字体大小设置为 1、下标、非粗体,然后使字体颜色与背景颜色相同,然后将其行高设置为默认值 14.5。然而,神秘的名字确实会泄露出去。用于排序和过滤的列标题单元格下拉箭头显示神秘名称,以及数据透视字段设置,当然还有当您单击此类单元格时的公式栏。但我想这是我能做的最好的吗?

然后再一次,我可能只是将这件事完美化了很多:) 但从这一点开始,它就是挑战!

标签: excelvbauser-experience

解决方案


确保在创建数据透视表时勾选“将此数据添加到 DataModel”框

AFAIK 当您的数据透视表连接到数据模型而不是直接连接到范围/表时,您可以更改表中的列名,您的数据透视表将保持正常。您甚至可以在 Pivot 中使用其他名称。


推荐阅读