如果列名称有换行符,如何引用Excel ListObject表列?

时间:2017-10-25 20:50:44

标签: excel excel-vba excel-formula excel-2010 vba

我的任务如下:

  • 必须将来自不同工作簿的多张工作表复制到新工作簿
  • 这些工作表中的每一个都包含一个Excel表格(ListObject),其名称类似于带有后缀T的工作表(工作表Foo,表格:FooT)
  • 新工作簿必须包含一个摘要表,其中列出了每个表名,并通过使用合适的公式引用它们来呈现各个表的各种值

这必须经常用于不同的工作簿,因此我们的想法是在VBA中这样做。

复制工作表很容易,在新工作表中列出表名很容易,但引用这些值会遇到问题。

一般的想法是做以下

ActiveSheet.Range("A1").Value = "FooT"
ActiveSheet.Range("B1").Formula = "=FooT[[#Totals],[Quantity]]"
ActiveSheet.Range("C1").Formula = "=FooT[[#Totals],[Total List Price]]"

并遍历所有工作表。

设置A的值和B的公式按预期工作并获得预期的结果。

C的问题是,而不是“总清单价格”,列标题实际上格式化为

“总
清单
价“

我无法改变这一点,这是一个设计决定。

如果我手动将公式添加到单元格中,这也是列名显示在公式中的方式。

所以这里有一些换行符,我已经尝试过在VBA中使用

ActiveSheet.Range("C1").Formula = "=FooT[[#Totals],[Total" & vbCrLf & _
                                                   "List" & vbCrLf & _
                                                   "Price]]"

和vb_Cr以及vb_Lf和vb_Newline而不是vbCrLf。试图将C的公式设置为任何这些变化都会产生臭名昭着的错误1004。

从其中一个工作表中获取列标题的值并在公式中使用它。这可能是一个潜在的解决方法,但我真的想知道我缺少什么或如何弄清楚如何正确构建这个公式字符串。

1 个答案:

答案 0 :(得分:1)

您的公式没问题,但通常情况下,如果标题是从键盘设置的,则换行符将为vbLf。我还怀疑标题中的任何地方都可能有前导和/或尾随空格字符。选择标题单元格,然后从VBE的立即窗口(Ctrl + G)中键入Debug.Print ActiveCell.Value,然后检查每个打印行的结束位置。

您使用的是Option Explicit吗?在你的问题中,你提到你已尝试过vb_Lf,但这个常量不存在,如果没有Option Explicit,则会被解释为空字符串。