Страницы: 1
RSS
Characters, Insert и ограничение на 256 символов., не осуществляется замена текста с помощью Characters, Insert
 
Уважаемые знатоки 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.

Microsoft Excel 2010.
 
Используйте FindNext или во втором поиске вставьте параметр After:=cl
 
Но в этом случае необходимой замены не произойдёт.
Я правильно понимаю?

Это не решение моей проблемы.
Мне необходимо обязательно осуществить замену с сохранением формата исходного текста(((
 
Aleksey, попробуйте вместо 5 строки. Аргумент 1 означает заменить только первое вхождение Text. Если нужно заменить все вхождения, опустите этот аргумент.
Код
cl=replace(cl.value,Text,"###",,1,vbTextCompare)
 
А, если у разных символов разное форматирование, то не пойдет.
 
Да так и есть, не подошло.
Исходный текст содержит обычные и подстрочные символы, при замене методом Replace подстрочные преобразуются в обычные, что для меня недопустимо.

Я одного понять не могу, проблема 256 символов вроде как возникала в версиях Excel 2003 и ниже, тут то в чем проблема?
Или объект Characters сам по себе не может обработать текст такой длиной?
Изменено: Aleksey - 03.02.2016 19:26:36
 
Aleksey, и много у Вас таких ячеек на листе? Расположите поверх ячеек Надписи, у них нет ограничения 256 для characters. Сейчас проверил:
Код
ActiveSheet.Shapes(1).TextFrame.Characters(501,5).Text="777"
 
Цитата
Казанский написал: много у Вас таких ячеек на листе?
Немало, порядка 900-1000.
Чтобы проводить манипуляции с текстом в надписях (также в примечаниях, фигурах и тд. - попробовал) необходимо этот текст туда переместить, а при перемещение его как раз формат отдельных символов слетает.
Спасибо за помощь.
 
Цитата
Aleksey написал:
Чтобы проводить манипуляции с текстом в надписях (также в примечаниях, фигурах и тд. - попробовал) необходимо этот текст туда переместить, а при перемещение его как раз формат отдельных символов слетает.
Однако можно переместить  8)
Код
Range("L1").Copy
ActiveSheet.Shapes(1).TextFrame2.TextRange.Paste
Но ~1000 шейпов на листе это, конечно, перебор, будет тормозить.
 
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 в ячейку без потери формата текста.

 
Доброе время суток
Цитата
Aleksey написал:
Подскажите способ
Переходите на иной способ работы с форматированным содержимым ячейки.
Содержимое, представленное на картинке
Скрытый текст
Как видите, ничего сложного. Перенос строки оформляется как
Страницы: 1
Наверх