VBAで用意されていません直接関数やメソッド配列の次元を取得することができ、以前の記事「配列の次元を取得する方法は、」配列の次元を取得するための捕獲間違った方法を使用する方法について説明し、この資料では、WindowsのAPIを使用する方法について説明しますアレイの寸法を取得します。
次のようにサンプルコードは次のとおりです。
Type SAFEARRAYBOUND
cElements As Long
lLbound As Long
End Type
Type SAFEARRAY
cDims As Integer
fFeatures As Integer
cbElements As Long
cLocks As Long
pvData As Long
rgsabound(1 To 60) As SAFEARRAYBOUND
End Type
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" ( _
dest As Any, _
source As Any, _
ByVal bytes As Long)
Private Const VT_BYREF = &H4000&
Function blnGetArrayMsg(DataArray As Variant, Array_Msg As SAFEARRAY) As Boolean
Dim lngPoint As Long
Dim intVType As Integer
If Not IsArray(DataArray) Then Exit Function
With Array_Msg
CopyMemory intVType, DataArray, 2
CopyMemory lngPoint, ByVal VarPtr(DataArray) + 8, 4
If (intVType And VT_BYREF) <> 0 Then
CopyMemory lngPoint, ByVal lngPoint, 4
End If
CopyMemory Array_Msg.cDims, ByVal lngPoint, 16
If Array_Msg.cDims > 0 Then
CopyMemory .rgsabound(1), ByVal lngPoint + 16, _
Array_Msg.cDims * Len(.rgsabound(1))
GetArray_Msg = Array_Msg.cDims
blnGetArrayMsg = True
End If
End With
End Function
Sub Demo()
Dim myArr(1, 2, 3, 100, 1000)
Dim ud_Msg As SAFEARRAY
If blnGetArrayMsg(myArr, ud_Msg) Then
MsgBox "数组维度为:" & ud_Msg.cDims
Else
MsgBox "Error!"
End If
End Sub
コード[解決済み]
メモリコピー、ビット演算を必要とする配列の次元情報へのアクセスを実現するCopyMemory API関数を使用したサンプル・コードは、ここでは詳細に説明していないが、関連する情報を検索することができます興味を持っています。
関連する関数は、カスタム関数としてパッケージ化された最初のパラメータが配列され、カスタムデータ構造のための第2のパラメータのタイプは、次の形式を用いて呼び出すことができSAFEARRAY
、その結果格納cDims
。
blnGetArrayMsg(myArr, ud_Msg)