64ビット版オフィスのVBAで、LongLong 型が追加されました。しかし、32ビット版では使用することはできません。几帳面な方は、#If Win64 Then ~ #Else ~ #End If を使用して、それぞれのバージョンごとに変数などを定義することになると思います。
スポンサーリンク
ADODB.Recordset.RecordCount プロパティ
ADODB.Recordset.RecordCount プロパティは、32ビット版ではLong型ですが、64ビット版ではLongLong型となるようです。
従って、以下の(手抜きな)スクリプトは32ビット版では動作しますが、64ビット版ではコンパイルエラー(型が一致しません)となってしまいます。
Dim cnt As Long cnt = rs.RecordCount ' ← コンパイルエラー発生(型が一致しません) ' Dim cnt LongLong とする必要あり
次のように変数を定義するとコンパイルエラーとならなくなります。
#If Win64 Then ' 64ビット版のとき Dim cnt As LongLong #Else ' 32ビット版のとき Dim cnt As Long #End If cnt = rs.RecordCount
参考までにLongLongデータ型の詳細です。
https://msdn.microsoft.com/ja-jp/vba/language-reference-vba/articles/longlong-data-type
LongLong データ型
LongLong ( LongLong 整数) 変数は、-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 の値範囲の符号付き 64 ビット (8 バイト) 数値として格納されます。 LongLong の 型宣言文字 は、キャレット (^) です。 LongLong は、64 ビット プラットフォームのみで有効な宣言型です。
わざわざ変数をバージョンごとに定義するのが面倒であれば、CLngで型変換をすることでも問題ないことも多いと思います。以下のスクリプトは64ビット版でもコンパイルエラーは発生しません。もちろん、Long型を超えるような数値となれば、期待する動作にはならないはずです。
Dim cnt As Long cnt = CLng(rs.RecordCount)