Уважаемые знатоки Excel можно ли решить данную задачу?
Код
Dim cl As Range, Text$
.....
Set cl = List.Range(Cells(1, 1), Cells(5, 5)).Cells.Find(What:=Text, LookAt:=xlPart)
Do Until cl Is Nothing
cl.Characters(InStr(cl, Text), Len(Text)).Insert "###"
Set cl = List.Range(Cells(1, 1), Cells(5, 5)).Cells.Find(What:=Text, LookAt:=xlPart)
Loop
Пробовал формат ячеек менять на "Общий", по совету на одном из форумов, результат тот же - бесконечный цикл замены текста одной и той же ячейки с количеством символов более 256.
Aleksey, попробуйте вместо 5 строки. Аргумент 1 означает заменить только первое вхождение Text. Если нужно заменить все вхождения, опустите этот аргумент.
Да так и есть, не подошло. Исходный текст содержит обычные и подстрочные символы, при замене методом Replace подстрочные преобразуются в обычные, что для меня недопустимо.
Я одного понять не могу, проблема 256 символов вроде как возникала в версиях Excel 2003 и ниже, тут то в чем проблема? Или объект Characters сам по себе не может обработать текст такой длиной?
Казанский написал: много у Вас таких ячеек на листе?
Немало, порядка 900-1000. Чтобы проводить манипуляции с текстом в надписях (также в примечаниях, фигурах и тд. - попробовал) необходимо этот текст туда переместить, а при перемещение его как раз формат отдельных символов слетает. Спасибо за помощь.
Aleksey написал: Чтобы проводить манипуляции с текстом в надписях (также в примечаниях, фигурах и тд. - попробовал) необходимо этот текст туда переместить, а при перемещение его как раз формат отдельных символов слетает.
Aleksey, а вот и решение: иметь на листе один шейп (можно его скрыть!). Скопировать текст из ячейки в шейп, работать там с characters, скопировать обратно в ячейку (в примере копируется в другую ячейку)
Код
Sub test()
Dim r As TextRange2
Set r = ActiveSheet.Shapes(1).TextFrame2.TextRange
Range("L1").Copy
r.Paste
r.Characters(400).InsertAfter "QWE"
r.Characters(401, 3).Font.Superscript = msoTrue
r.Copy
Range("L2").Select
ActiveSheet.Paste
Range("L2").WrapText = True 'это свойство слетает при вставке
End Sub
Позвольте воскресить этот запрос, так как столкнулся с проблемой. При использовании примера Казанского наткнулся на некорректную работу в следующем случае:
Код
r.Characters(400).InsertAfter vblf
а также в тех случаях, когда в тексте ячейки уже присутствует перенос строки. Как понимаете, текст при ActiveSheet.Paste копируется не в нужную ячейку, а в несколько ячеек (зависит от количество vblf в тексте).
Подскажите способ иного переноса текста из Shapes в ячейку без потери формата текста.