Этот оператор служит для присвоения строк с одновременным выравниванием слева, а также для копирования записи одного определенного пользователем типа в запись другого типа. Его синтаксис:
Lset СтрПеременная = СтрВыражение Lset переменная1 = переменная2
Здесь ключевое слово LSet обязательно, СтрПеременная - имя строковой переменной, СтрВыражение - выражение строкового типа. Во втором варианте переменная1 - имя переменной некоторого определенного пользователем типа, в которую выполняется копирование, переменная2 - имя переменной, возможно, другого пользовательского типа, значение которой копируется.
Результатом присвоения строк всегда является строка той же длины, что и у СтрПеременная. Если при этом СтрВыражение короче, добавляются пробелы справа; длиннее - лишние символы справа удаляются.
При втором варианте оператора двоичное представление записи из участка памяти, отведенного переменной2 копируется в участок памяти, отведенный переменной1, - При этом данные не преобразуются в соответствии с типами элементов (полей) записи, и если типы соответствующих элементов обеих записей не совпадают, результат операции трудно предсказать (часто выдается сообщение о несоответствии типов). Поэтому этот вариант следует использовать, лишь тогда, когда типы всех соответствующих элементов записей совпадают и имеют одинаковый размер.
Примеры.
Public Sub Assign2() Dim Str1 As String, Str2 As String
Str1 = "0123456789" ' Начальное значение Str2 = "abcd" Debug.Print Str1, Str2
LSet Str2 = Str1 ' Результат - "0123" LSet Str1 = " Влево" ' Результат - " Влево Debug.Print Str1, Str2
End Sub"
Вот результаты отладочной печати:
0123456789 abcd Влево 0123
В следующем примере происходит корректное копирование одной записи в другую; типы соответствующих элементов в определенных пользователем типах MyType1 и MyType2 совпадают:
Type MyType1 age As Integer cost As Long End Type
Type MyType2 year As Integer pay As Long 'pay As Integer End Type
Public Sub Assign3() Dim my1 As MyType1 Dim my2 As MyType2
my1.age = 50 my1.cost = 45666
my2.year = 1997 my2.pay = 22000 Debug.Print my1.age, my1.cost, my2.pay, my2.year
LSet my2 = my1 ' после этого присвоения my2.year=50 и my2.pay=45666 Debug.Print my1.age, my1.cost, my2.pay, my2.year
End Sub
Вот результаты отладочной печати:
50 45666 22000 1997 50 45666 45666 50
Если изменить тип элемента pay в MyType2 на Integer, то будет напечатано значение my2.pay, равное 0.