【事象】
Windows10移行にて
EXCEL VBAでODBC接続(ADODB)している場合、
以降前:32bitWindows+32bitEXCEL+32bitODBC 正常動作
移行後:64bitWindows+32bitEXCEL+32bitODBC 問題なし
64bitWindows+64bitEXCEL+64bitODBC エラー
→ ADODBのデータセットの件数を取得する場合、
エラーが発生する。(型が一致しません)
RecordSet.RecordCount を Long(Integer)型にいれるか、
Long(Integer)型を加算しようとした場合
【原因】
これは、32bitまたは 64bit プラットフォームの相互運用性の問題で
参照設定で「Microsoft ActiveX Data Objects」の
2.0 2.1 2.5 2.6 2.7 2.8 6.0 を使用している場合に発生する。
【詳細原因】
一部の ADO Api のプラットフォームは、 ADO 2.7以降のバージョンに依存しています。 64bit バージョンの Windows では、これらの ADO Api は、 LONGLONGのデータ型) などの 64bit データ型を使用して引数を処理します。ただし、これらの Api を使用するアプリケーションでは、まだ、 LONGデータ型を使用します。
したがって、マクロを実行しようとするとき、「型の不一致」エラー メッセージが表示されます。
LongLong データ型
office 365 dev account olprod Office GSX
Longlong(Longlong integer) 変数は、64ビット (8 バイト) の符号付き数値として格納されます。
-9223372036854775808 から9223372036854775807の範囲内
【対策】
→参照設定で、「Microsoft ActiveX Data Objects x.x Library」からチェックをはずす。
「Microsoft ActiveX Data Objects 6.1 Library」に変更
【注意】
型変換 CInt、CLng、CDbl は使用できません。
CInt Integer -32,768 から 32,767。小数点以下は丸められます。
CLng Long -2,147,483,648 から 2,147,483,647。小数点以下は丸められます。
CDbl Double 負の値の場合は -1.79769313486231E308 ~ -4.94065645841247E-324、
正の値の場合は 4.94065645841247E-324 ~ 1.79769313486232E308。
LongLong (64 ビットのプラットフォームの LongPtr を含む) をそれよりも
小さい整数型に明示的に代入するには、変換関数を使用する必要があります。
LongLong をそれよりも小さい整数に暗黙的に変換することはできません。