Форумы HiProg.com - MS ACCESS, VBA, VB

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

ник: Анатолий (Киев)
Lukas, что вы пробовали и что у вас не получилось?
То, что TypeName(varArr(0, 1)) дает String - так и должно быть, но, видимо, вы не знаете, как VB/VBA работает со строками. Как, по-вашему в переменной Variant (16 байт) может вместиться строка в 1000 символов или, например, Recordset?
На самом деле переменная String предсттавляет из себя значение Long, в котором указан адрес начала строки.

Попробуйте следующий тест:

Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
    lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)

Sub TestCopyArrays()
Dim Arr1(1 To 2) As Variant, Arr2(1 To 2) As Variant
Arr1(1) = "Первый элемент массива"
Arr1(2) = "Второй элемент массива"
    Call CopyMemory(lpvDest:=Arr2(1), lpvSource:=Arr1(1), cbCopy:=UBound(Arr1) * 16)
Debug.Print Arr2(1)
Debug.Print Arr2(2)


Dim Arr3(1 To 2, 1 To 2) As Variant
Arr3(1, 2) = "Первый элемент второй размерности массива"
Arr3(2, 2) = "Второй элемент второй размерности массива"
    Call CopyMemory(lpvDest:=Arr2(1), lpvSource:=Arr3(1, 2), cbCopy:=UBound(Arr1) * 16)
Debug.Print Arr2(1)
Debug.Print Arr2(2)


Dim v As Variant
Arr3(1, 2) = "Первый элемент второй размерности массива в переменной Variant"
Arr3(2, 2) = "Второй элемент второй размерности массива в переменной Variant"
v = Arr3
    Call CopyMemory(lpvDest:=Arr2(1), lpvSource:=v(1, 2), cbCopy:=UBound(Arr1) * 16)
Debug.Print Arr2(1)
Debug.Print Arr2(2)
End Sub


Ваше имя:

Пароль:

Цитировать: [quote][/quote] Код: [code][/code]
Жирный: [b][/b] Наклонный: [i][/i]
URL: [url][/url] 

Сообщение:

 Размер файла не более 50 Кбт. Большие файлы можно размещать на www.slil.ru

Прикрепить:

 

Для вставки смайлов в текст щелкните по значку.