我的任务如下:
- 必须将不同工作簿中的多个工作表复制到新工作簿中
- 每个工作表都包含一个Excel表(ListObject),其名称类似于带有后缀T的工作表(sheetFoo,table:英尺)
- 新工作簿必须包含一个汇总表,其中列出了每个表的名称,并通过使用适当的公式引用相应表的各个值来显示这些值
必须经常为不同的工作簿执行此操作,因此我们的想法是在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的问题在于,列标题的格式实际上不是“Total List Price”,而是
“总计
列表
价格”
我不能改变这一点,这是一个设计决定。
如果我手动将公式添加到单元格中,列名也将以这种方式显示在公式中。
这里有一些换行的地方,我试着在VBA中使用
ActiveSheet.Range("C1").Formula = "=FooT[[#Totals],[Total" & vbCrLf & _
"List" & vbCrLf & _
"Price]]"
和vb_Cr以及vb_Lf和vb_Newline而不是vbCrLf。试图将C的公式设置为这些变体中的任何一个都会产生臭名昭著的错误1004。
从其中一个工作表中获取列标题的值,并在公式中使用它。这可能是一个潜在的解决方法,但我真的很想知道我遗漏了什么,或者我如何才能正确地构建此公式字符串。
2条答案
按热度按时间oalqel3c1#
您的公式是正确的,但通常,如果标题是从键盘设置的,则换行符将是vbLf。我还怀疑标题中可能有前导和/或尾随空格字符。选择标题单元格,从VBE的即时窗口(Ctrl+G)键入Debug.Print ActiveCell.Value,然后检查每个打印行的结束位置。
您是否正在使用Option Explicit?在您的问题中,您提到您已尝试使用vb_Lf,但这个常数并不存在,而且如果没有Option Explicit,它将被解释为空字符串。
3htmauhk2#
在单元格中输入换行符时,文本实际上与上一行是连续的,没有分隔符,除非在换行符前输入空格。要命名列,上一行的最后一个单词与下一行的第一个单词之间必须没有空格,如下所示:[价目表总价]