3

C++ sizeofVBAに同等の機能はありますか?

Uboundリモートで類似している唯一の関数は、配列のandLBound演算子のようです。

Dim arr(1 to 4) as integer
MsgBox Ubound(arr)

しかし、これは実際にはC++コードと同じものではありません。

int arr[10];
std::cout << sizeof(std::string) << "\t" << sizeof(arr);
4

4 に答える 4

5

これはとても遅いと思いますが...あなたが欲しいのはLenB()

Public Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Debug.Print LenB("a") '==>2 i.e. ["a",0&]

Dim r as RECT
debug.print LenB(r) '==>16 i.e. 4 bytes for each long
于 2019-01-06T16:45:24.033 に答える
2

VBAで使用できるいくつかのポインタ関連の関数は次の場所にあります。http: //support.microsoft.com/kb/199sizeof ​​824

VarPtr配列の場合、一時的に配列を1項目長くしてから、目的のサイズに縮小すると、何かを実行できる可能性があります。

Sub foo()

Dim arr() As Integer 
Dim i As Integer

ReDim arr(1 To 5)
arr(1) = 12
arr(2) = 456
arr(3) = -41
arr(4) = 17

Debug.Print VarPtr(arr(1)) & "; " & VarPtr(arr(5)) & "; " & VarPtr(arr(5)) - VarPtr(arr(1))

ReDim Preserve arr(1 To 4)

End Sub
于 2012-09-12T01:45:23.543 に答える
2

Len関数がありますがSizeOf、文字列では、文字列変数に含まれる文字列の長さを文字通りチェックするため、機能しません。

したがって、intの配列のバイトサイズを確認するには、次のようにします。

Dim arr(1 To 4) As Integer
Debug.Print (UBound(arr) - LBound(arr) + 1) * Len(arr(LBound(arr)))

イミディエイトウィンドウには次のように表示されます。 8

于 2014-03-14T19:30:35.020 に答える
0

VBAリファレンスマニュアルで定義されているとおり。

LENまたはを使用できますLENB


の例LEN

Type CustomerRecord    ' Define user-defined type.
    ID As Integer    ' Place this definition in a 
    Name As String * 10    ' standard module.
    Address As String * 30
End Type

Dim Customer As CustomerRecord    ' Declare variables.
Dim MyInt As Integer, MyCur As Currency
Dim MyString, MyLen
MyString = "Hello World"    ' Initialize variable.
MyLen = Len(MyInt)    ' Returns 2.
MyLen = Len(Customer)    ' Returns 42.
MyLen = Len(MyString)    ' Returns 11.
MyLen = Len(MyCur)    ' Returns 8.

の例LENB

Function LenMbcs (ByVal str as String)
    LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function

Dim MyString, MyLen
MyString = "ABc"
' Where "A" and "B" are DBCS and "c" is SBCS.
MyLen = Len(MyString)
' Returns 3 - 3 characters in the string.
MyLen = LenB(MyString)
' Returns 6 - 6 bytes used for Unicode.
MyLen = LenMbcs(MyString)
' Returns 5 - 5 bytes used for ANSI.
于 2019-09-13T16:53:57.863 に答える