gpt4 book ai didi

arrays - 将 VBA 数组分配给 Excel 范围的公式时出现奇怪的行为

转载 作者:行者123 更新时间:2023-12-02 06:08:49 25 4
gpt4 key购买 nike

这很奇怪......有人有一些知识或者可以弄清楚为什么会发生这种情况?

过去,我能够将公式数组分配给 Excel 范围(快速分配示例: Range("A1:A1000") = ArrayOfFormulas )。与逐个单元格分配相比(示例单元格按单元格:Range("A"& i).Formula=ArrayOfFormula(i) 在循环内。很慢!)。

我现在正在使用 Excel 2013,当尝试将存储在字符串数组中的公式分配给 Excel 范围时,它不起作用(Excel 显示公式,但不显示计算结果的左侧部分)下图)不幸的是我无法检索旧代码进行比较。例如,以下代码在 A1 到 A1000 范围内显示“=1+2”而不是“3”。

Sub AssignFormulas_1()
Dim i as Long
Dim FORML_ARRAY(1 To 1000, 1 To 1) As String
For i = 1 To 1000
FORML_ARRAY(i, 1) = "=1+2"
Next i
Range("A1:A1000").Formula = FORML_ARRAY '<- Don't work as formula
' It put the value!
End Sub

但是,当我不使用公式数组时,它工作正常(所有单元格显示“3”而不是“=1+2”,如下图右侧部分所示)。代码如下:

Sub AssignFormulas_2()
Dim i as Long
Dim FORML_SINGLE As String
FORML_SINGLE = "=1+2"
Range("A1:A1000").Formula = FORML_SINGLE '<- works ok, not practical for my
' real life case as I need
' different formula for each cell.
End Sub

以下代码也可以很好地工作(在这种情况下,我逐个单元格地分配公式,因此更灵活,但对于大型公式来说速度很慢)。

Sub AssignFormulas_3()
Dim i as Long
Dim FORML_ARRAY(1 To 1000, 1 To 1) As String
For i = 1 To 1000
FORML_ARRAY(i, 1) = "=1+2"
Range("A1:A" & i).Formula = FORML_ARRAY(i, 1) '<- works ok, but slowly
Next i
End Sub

以上所有代码输出的图片:

Example of result wrong (left) and correct (right)

<小时/>

注意:单元格格式正确为数字,而不是文本!

最佳答案

你的第一个代码应该可以工作。
不要将其声明为字符串,而是将其声明为变体。

因此请更改您的声明:

Dim FORML_ARRAY(1 To 1000, 1 To 1) As String

对此:

Dim FORML_ARRAY(1 To 1000, 1 To 1) As Variant

我无法在 Excel 2013 上尝试它,但它应该可以工作。
希望如此。

关于arrays - 将 VBA 数组分配给 Excel 范围的公式时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19238844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com