Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
ник: Анатолий (Киев) 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
Ваше имя:
Пароль:
Сообщение:
Прикрепить:
Для вставки смайлов в текст щелкните по значку.