[VBA] ADODB.Recordset.RecordCountプロパティは64ビット版ではLongLong型

Pocket

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)
  

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *