我为每个listobject列提供了一系列函数。文件很重且崩溃,所以我只想将每个公式的结果保持为静态值。我可以将公式分配给范围,并要求excel将范围转换为值。但我想知道是否有办法要求VBA只写出范围内的静态值而不是公式本身。 以下是我到目前为止的情况:
Sub calculate2()
Dim i As Long, t As Long
t = Timer
With Sheet3.ListObjects(1)
For i = 3 To 9
.ListColumns(i).DataBodyRange.ClearContents
.Range.Cells(2, i).Formula = sheets3.range("formula").cells(i,1).formula
.ListColumns(i).DataBodyRange = .ListColumns(i).DataBodyRange.Value
Next i
End With
Debug.Print Timer - t
End Sub
答案 0 :(得分:0)
作为我自己问题的答案, 我在寻找的是:" application.Evaluate"我发帖说,如果有人通过搜索来到这里可以找到我最终找到的想法和解决方案。这是一个例子:
Sheet3.ListObjects(1).ListColumns(3).DataBodyRange = [IFERROR(IF(COUNTIFS(ZZ84!$B:$B,[WO],ZZ84!$E:$E,"=*V99",ZZ84!$L:$L,"<>")=1,1,0),"")]
在这种情况下,不需要循环,并且每个范围必须编写需要的代码行(在VBA中嵌入函数,我正在寻找的东西)。将上述功能直接放入excel单元中的唯一不同之处是使用[WO]而不是[@WO]。因此,计算数据数组并直接在指定范围内写入数据。 (这里列表列3的主体范围)。
对我而言,由于我的功能计算了voilate,它有助于避免崩溃。
另一个简单的例子是:
range("b1:b10")=[if(row(1:10),if(a1:a10>3,"big","Small"))]
或
range("b1:b10") = evaluate("if(row(1:10),if(" & range("a1:a10").address&">3,""big"",""small""))")
亲切的问候, 中号