Хобрук: Ваш путь к мастерству в программировании

Ошибка в Excel VBA изменить шрифт текста в ячейке

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

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

Вот изображения ячеек в excel и поведение, когда что-то идет не так:

странный результат

Вот почему мне было любопытно, видел ли кто-нибудь эту проблему и есть ли для нее чистое «решение».

Public Sub Find_and_replace_in_string(CellToEvaluate As Range, ValueToBeFoundAndReplaced As String, Newvalue As String, Mark_updated As Integer)
Dim startchar As Integer
Dim len_input As Integer
Dim len_newvalue As Integer
Dim endchar As Integer
Dim string_input As String
Dim oRange As Excel.Range
Set oRange = CellToEvaluate
startchar = 1 ' init value
len_newvalue = Len(Newvalue)
Application.ScreenUpdating = False
If oRange.Cells.Count = 1 Then
    While startchar <> 0
        string_input = oRange.Cells.Value
        startchar = InStr(startchar, string_input, ValueToBeFoundAndReplaced)
        'check if the first character after the match is a comma or en of string
        If startchar <> 0 Then
            endchar = startchar + Len(ValueToBeFoundAndReplaced)
            If Mid(string_input, endchar, 1) = "" Or Mid(string_input, endchar, 1) = "," Then
                len_input = Len(ValueToBeFoundAndReplaced)
                'use replace function in a very specific region to replace the correct part
                With oRange.Characters(Start:=startchar, Length:=len_input)
                    .Text = Newvalue
                End With
                'oRange.Cells.Characters(Start:=startchar, Length:=len_input).Text = Newvalue

                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                ''quick Fix for Issue with randomly changing fonts, if first character is not changed
                'With oRange.Characters(Start:=1, Length:=1).Font
                '    .ColorIndex = .ColorIndex
                'End With
                '"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


                If Mark_updated <> 0 Then
                    With oRange.Characters(Start:=startchar, Length:=len_newvalue).Font
                        .Bold = True
                        .ColorIndex = Mark_updated '.ColorIndex + 1
                    End With
                    'oRange.Cells.Characters(Start:=startchar, Length:=len_newvalue).Font.colorindex = Mark_updated
                End If
            End If
            startchar = startchar + len_newvalue
        Else
            startchar = 0
        End If
    Wend
End If
Application.ScreenUpdating = True
End Sub

Public Sub test_find_and_replace()
     Dim example_sheet As Excel.Worksheet
     Set example_sheet = Sheets("Sheet1")
     Find_and_replace_in_string example_sheet.Cells(3, 1), "one", "111", 3
End Sub

с уважением, Град

05.07.2017

Новые материалы

Введение в контекст React
В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

Это оно
Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

Базовое руководство по переносу концепций обучения в глубокое обучение
Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

C в C.R.U.D с использованием React-Redux
Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

5 обязательных элементов современного инструмента конвейера данных
В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..