代码之家  ›  专栏  ›  技术社区  ›  Michael Schumacher

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

  •  0
  • Michael Schumacher  · 技术社区  · 7 年前

    我的任务如下:

    • 必须将不同工作簿中的几张工作表复制到新工作簿中
    • 新工作簿必须包含一个汇总表,其中列出了每个表名,并通过引用适当的公式来表示各个表的各种值

    必须经常为不同的工作簿执行此操作,因此我们的想法是在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\u Cr和vb\u Lf和vb\u换行,而不是vbCrLf。试图将C的公式设置为任何这些变化都会产生臭名昭著的错误1004。

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Excelosaurus    7 年前

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

    您是否使用Option Explicit?在你的问题中,你提到你已经尝试了vb\u Lf,但这个常量不存在,如果没有Option Explicit,就会被解释为一个空字符串。