Формат текста, с которым я имею дело, выглядит следующим образом:
| John | купил | яблоко |.
Цель состоит в том, чтобы найти весь текст между "|" (например, "Джон" и "яблоко"), изменить его цвет, а затем удалить оба "|".
Предполагается, что мой текущий код находит первый и второй экземпляры «|», go через каждый символ между двумя позициями, затем меняет цвет шрифта, удаляя оба «|» и я oop, чтобы сделать все это снова, пока нет "|" можно найти.
Моя проблема в том, что он часто удаляет и окрашивает неправильные символы. Я подозреваю, что это как-то связано с позициями символов, но я не знаю, где.
Соответствующий код выглядит так:
Dim Cell As Range
Dim iChr As Integer, N As Integer, Content As Integer
Dim openPos As Long, Dim clsPos As Long
Dim textBetween As String
For Each Cell In ws.UsedRange' relevant code is going to loop through each cell of each sheet
openPos = 0
N = 1
iChr = InStr(1, Cell.Value, "|")
Do Until iChr = 0 'Loop until no "|"
openPos = InStr(openPos + N, Cell, "|", vbTextCompare) 'first "|"
clsPos = InStr(openPos + 1 + N, Cell, "|", vbTextCompare) 'second "|"
For Content = openPos To clsPos
Cell.Characters(Content, 1).Font.Color = RGB(0, 255, 0)
Next Content
N = N + 1
Cell.Characters(clsPos, 1).Delete 'delete first and second"|"
Cell.Characters(openPos, 1).Delete
iChr = InStr(1, Cell.Value, "^") 'check if there is any "|" left
Loop
Next Cell