2016-07-25 2 views
0

У меня есть шрифт для отображения определенных символов. Они печатаются на листе со стандартным шрифтом по умолчанию. Я могу идентифицировать эти символы, а затем изменить шрифт этих символов на свой символ, но с некоторыми проблемами заставить его работать правильно, когда в ячейке содержится более одного идентифицированного символа.Изменить шрифт нескольких подстрок в ячейке Excel

Например, и клетки могут содержать:

Это значение Х и Y, и Z

мне нужно изменить шрифт только из X, Y и Z.

Вот как я в настоящее время меняется шрифт символы с помощью VBA:

Sub InsertFont(insertRange As Range, symbolText As String, symbolPosition As Integer) 
    Dim cellText As String 
    Dim newValue As String 
    cellText = insertRange.Value2 
    newValue = Replace(cellText, symbolText, SymbolDict.Item(symbolText), 1, 1) 
    insertRange.Value2 = newValue 
    With insertRange.Characters(symbolPosition, Len(SymbolDict.Item(symbolText))).Font 
     .Name = "MyFont" 
    End With 

End Sub 

пР oblem после каждого изменения шрифта, остальная часть ячейки возвращается к шрифту по умолчанию! Как я могу получить изменения шрифта для всех изменений?

конечный результат:

Это значение X и Y, а ☹

+0

Что в 'SymbolDict'? – Comintern

+2

После того, как вы создали «смешанное» форматирование в ячейке, вам необходимо внести все изменения в содержимое ячейки с помощью методов «Символы» (Insert/Delete). Как вы видите, если вы используете 'Value', то любое форматирование каждого символа получает сброс –

+0

@Comintern Ключ - это текст, который я заменяю, а item - это новое значение для его замены. – GisMofx

ответ

0

по предложению @TimWilliams через комментарии, вот решение, которое работает:

Sub InsertSymbol(insertRange As Range, symbolText As String, symbolPosition As Integer) 

    Dim cellText As String 
    Dim newValue As String 
    insertRange.Characters(symbolPosition, Len(symbolText)).Delete 
    insertRange.Characters(symbolPosition, 0).Insert SymbolDict.Item(symbolText) '2nd parameter 0 to not overwrite any characters 
    insertRange.Characters(symbolPosition, 1).Font.Name = "My Symbol Font Name" 

End Sub 
Смежные вопросы