2016-07-25 26 views
0

SQLクエリから手動で挿入する場合のみ、CopyFromRecordsetを挿入すると式が再計算されません。Excel VBA:数式をCopyFromRecordsetで使用できません。手動で挿入した場合のみ

SQLテーブルへの接続が設定されています。これは、行セットを返してテーブルに挿入します。同じシートには、データの横の列にいくつかの数式(SUM.IFの種類)があります。接続は正常に動作し、挿入されたデータは正常に見えます。 SQLクエリからデータをコピーしてExcelシートに挿入すると、数式が再計算されて動作します。 CopyFromRecordsetを使用すると、数式は再計算されず、単に " - "が出力されます。

セルの書式は変更されません。私がCopyFromRecordsetを挿入しても、数式は正しいように見えます。 再計算しようとすると、式が更新されないのはなぜですか?

sht.Select 
//Selects old records and clears them 
LastRow = sht.Cells(sht.Rows.Count, "B").End(xlDown).Row 
Set DataRange = Range("A2:L" & LastRow) 
DataRange.Select 
DataRange.ClearContents 
//Gets data from SQL query and inserts to sheet 
strSQL = "selects column 1,2,3 from table" 
rs.ActiveConnection = Conn 
rs.Open strSQL, Conn, 1, 1 
sht.Range("A2").CopyFromRecordset rs 

をそして、私は私のSUM.IF式から得るすべては " - ":

コードは、私が使用しています。

+0

再計算(Ctrl + Shift + Alt + F9)すると、数式が更新されますか?または、表示されたコードの後に​​ 'sht.UsedRange.Calculate'を追加してみてください。 –

+0

私は両方を試みましたが、それでも助けにはなりません。私は " - "を取得します。 – LRL

+0

完全な数式の例を表示できますか?より単純な式(たとえば、単一セルへのリンク)も再計算されませんか?あなたは 'CalculateFullRebuild'を試しましたか? –

答えて

0

問題は、数値を含む列の形式が正しくないことでした。 Excelの列は正しくフォーマットされていましたが、明らかにSQLからのデータはvarchar形式で送られてきました。そのため、CopyFromRecordsetはデータをシートに流し込み、数値は再フォーマットされず、SUMIF()は数字として受け入れませんでした。私はちょうどその列を浮動小数点に変換するために私のSQLラインを変更しました

strSQL = "SELECT CONVERT(float,[numberColumn]) AS [number], column2, column3" 

すべてが今すぐうまくいきます! :D

関連する問題