Вам необходимо понять, как работают методы и операции присваивания.
Sh.Cells(i, 5) = Left(Sh.Cells(i, 5).Value, 10).Copy
Это назначение выражения левой стороны (LHS) Sh.Cells(i, 5).Value
(через неявный элемент по умолчанию)call) значение, возвращаемое выражением правой части (RHS), однако RHS ничего не возвращает.
Left(Sh.Cells(i, 5).Value, 10)
Это выражение возвращает Variant/String
длиной до 10 символов.В VBA String
- это просто значение (как Integer
или Long
, за исключением того, что оно содержит текст), а значения в VBA не имеют методов-членов .
Так что вы не можете сделать это:
Debug.Print "ABC".Copy
Поскольку для вызова члена требуется объект - следовательно, требуется объект .
Удалите член .Copy
позвоните, вы исправите эту ошибку.
Sh.Cells(i, 5).PasteSpecial Paste:=xlPasteValues
Это технически избыточно - строка перед этим только что сделала это, присваивая ячейке Value
напрямую.Но если вы хотите вызвать Range.Copy
, вы не можете сделать это как часть выражения RHS, потому что Range.Copy
ничего не возвращает - поэтому вы бы сделали что-то вроде этого:
Sh.Cells(i, 5).Copy
Sh.Cells(i, 5).PasteSpecial Paste:=xlPasteValues
Но опять же, это излишне - вам не нужно включать буфер обмена здесь.