使用Excel VBA宏,我正在构建一个excel表(listobject),其中包含几个数据列(其中包含值)和一个包含公式的列。这些公式对于每一行都是不同的。这些公式由vba构造并存储在一个数组中,并且最后只放在表列中一次。这对于速度问题是必要的。
我的问题是存储在列中的结果公式都是相同的。它们是数组第一个元素中的一个。
注意:
这是一个非常简化的代码示例,用于使用公式来填充表格的列:
Dim sformulas(1 To 3) As String
sformulas(1) = "=""x"""
sformulas(2) = "=""y"""
sformulas(3) = "=""z"""
ActiveSheet.ListObjects("Table1").ListColumns("ColumnX").DataBodyRange.Formula = Application.Transpose(sformulas)
ColumnX中的结果公式全部为=" x"
但我希望有" x",=" y"和=" z"
有没有办法在表格中存储适当的公式?
答案 0 :(得分:1)
我可以重现错误的唯一方法是第一个值是字符串公式的字符串。我无法用其他方式重现它。
Dim a As Variant
a = Array("x", "=""y""", "=""z""")
Dim xRange As Range
Set xRange = ActiveSheet.ListObjects("Table1").ListColumns("Column2").DataBodyRange
xRange.Formula = Application.Transpose(a)
工作得很好。但是a = Array("=""x""", "y", "z")
会产生所有" x"。
虽然我无法解释为什么会这样,但我可以解决这个问题。你不必要地使用公式来表示常数。只需使用Array("x", "y", "z")
和DataBodyRange.Value
代替公式(尽管它们都会产生相同的效果。)
如果您使用公式将单元格保存为TEXT,则将范围的Numberformat
设置为“常规”到“文本”。
Dim a As Variant
a = Array("0001", "0004", "0002")
Dim xRange As Range
Set xRange = ActiveSheet.ListObjects("Table1").ListColumns("Column2").DataBodyRange
With xRange
.NumberFormat = "@" ' text format
.value = Application.Transpose(a)
End With
这将给出" 0001"," 0004"," 0002"而不是1,4,2。