从记录集复制时不计算Excel公式

时间:2014-09-19 19:37:11

标签: formula recordset calculated-columns

我正在SQL查询中构建公式,然后使用EXCEL VBA函数CopyFromRecordSet在电子表格中插入公式。公式的文本正确输入但仅显示为文本而不计算。计算模式设置为自动,单元格格式为" General"而不是" Text"。

为了得到公式来计算,我必须输入每个单元格,就像我要编辑公式然后离开单元格而不必实际编辑任何东西。只是进入和退出的动作导致公式计算,但必须在每个单元格上手动完成。

Sub Test1()
  Application.ReferenceStyle = xlR1C1

  Dim qry As String
  qry = "SELECT mYEAR, '=RC[-1]*12' AS xFormula FROM tblYears"

  Dim Datacmd As ADODB.Command
  Set Datacmd = New ADODB.Command

  Datacmd.CommandText = qry

  Dim Datars As ADODB.Recordset
  Set Datars = DB.RunSelect(GV.ConStr_Config, Datacmd)

  ActiveSheet.Range("A1").CopyFromRecordset Datars

  Application.ReferenceStyle = xlA1
End Sub

这导致了......

    1       2
1 2012    =RC[-1]*12
2 2013    =RC[-1]*12
3 2014    =RC[-1]*12

然后我必须在每个公式单元格中双击以开始编辑,然后我可以单击另一个单元格以退出公式,它将计算。

    1       2
1 2012    24144
2 2013    24156
3 2014    24168

我尝试添加“立即计算”按钮;并在开头用APPLICATION.CALCULATE(和CalculateFULL)添加VBA命令APPLICATION.CALCULATION = xlCalculationManual。

我无法在查询中进行计算,公式需要与最终产品中的Excel数据互动。

(DB.RunSelect函数是我执行查询并返回断开连接的记录集的方法。)

由于

2 个答案:

答案 0 :(得分:0)

您必须迭代结果集并设置如下公式:

Range("A1").Formula = myFormulaString

或者

Range("A1").FormulaR1C1 = myFormulaString

答案 1 :(得分:0)

我遇到了类似的情况。在尝试了多种选择之后,我采取了以下措施,并且可以正常工作:

  1. 允许copyFromRecordset完成
  2. 在下一行中,计算应用vlookup的列的范围
  3. 将此范围的value属性分配给公式属性,如下所示:
Worksheets("sheet").range("A1:A10").formula = Worksheets("sheet").range("A1:A10").Value

我猜这个过程会触发重新计算。