我正在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函数是我执行查询并返回断开连接的记录集的方法。)
由于
答案 0 :(得分:0)
您必须迭代结果集并设置如下公式:
Range("A1").Formula = myFormulaString
或者
Range("A1").FormulaR1C1 = myFormulaString
答案 1 :(得分:0)
我遇到了类似的情况。在尝试了多种选择之后,我采取了以下措施,并且可以正常工作:
Worksheets("sheet").range("A1:A10").formula = Worksheets("sheet").range("A1:A10").Value
我猜这个过程会触发重新计算。