Окрашивание ячеек, если последний или первый символ является пробелом - PullRequest
5 голосов
/ 22 января 2020

Ниже приведен код VBA для окраски ячеек, если последний или первый символ является пробелом.

Я попробовал тестовый файл, и он сработал, но в файле, который необходимо проверить, появляется сообщение об ошибке :

"Ошибка во время выполнения '13': несоответствие типов".

Если я нажму на отладку, желтая текстовая строка, отображающая ошибку, перейдет к

If Left(sheetArr(i, j), 1) = " " Then

Я проверил свой рабочий лист и присвоил правильное имя.

У меня есть тысячи ячеек для проверки. Я не могу изменять ячейки, я могу только добавлять макросы для проверки, потому что этот файл будет использоваться другими отделами.

Sub trailingspace()
'
' Find preceding and trailing spaces in a cell.
' Color these cells pink.
'

    Dim i As Long, j As Long
    Dim sh As Worksheet
    Dim sheetArr As Variant
    Set sh = ThisWorkbook.Sheets("wording")
    sheetArr = sh.UsedRange
    rowC = sh.UsedRange.Rows.Count
    colC = sh.UsedRange.Columns.Count

    For i = 1 To rowC
        For j = 1 To colC
            If Left(sheetArr(i, j), 1) = " " Then
                sh.Cells(i, j).Interior.ColorIndex = 26
            End If

            If Right(sheetArr(i, j), 1) = " " Then
                sh.Cells(i, j).Interior.ColorIndex = 26
            End If
        Next j
    Next i
End Sub

Ответы [ 3 ]

5 голосов
/ 22 января 2020

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

  • Начало выбрав диапазон, который вы хотите проверить на форматирование.
  • Создайте новое правило CF, выбрав второй параметр «Форматировать только те ячейки, которые содержат».
  • В первом раскрывающемся списке выберите « Specifi c Text "
  • Во втором поле выберите" начиная с "
  • В поле формулы просто введите пробел
  • Затем выберите желаемое форматирование (которое в вашем случае будет розовая заливка)
  • Повторите шаги, описанные выше, за исключением использования «окончания с» в этой итерации

В конце ваш результат будет выглядеть следующим образом :

enter image description here

2 голосов
/ 22 января 2020

Вы можете просто применить условное форматирование для диапазона, который вы хотите проверить, используя следующую формулу:

=OR(LEFT(A1,1)=" ",RIGHT(A1,1)=" ")

или добавить условие, используя VBA

rng.FormatConditions.Add Type:=xlExpression, Formula1:="=OR(LEFT(A1,1)="" "",RIGHT(A1,1)="" ""))"
rng.FormatConditions(rng.FormatConditions.Count).SetFirstPriority
With rng.FormatConditions(1)
    .Interior.PatternColorIndex = xlAutomatic
    .Interior.ThemeColor = xlThemeColorAccent2
    .Interior.TintAndShade = 0
    .FormatConditions(1).StopIfTrue = False
End With
2 голосов
/ 22 января 2020

Согласно моему комментарию, я думаю, что это может быть условием для условного форматирования или ReplaceFormat для предотвращения итерации по всем этим ячейкам. Имейте в виду, что UsedRange также ненадежен (и, вероятно, причиной ненадежных измерений, когда вы вызываете свой массив с> ошибкой). Так что, возможно, попробуйте что-то вроде ниже:

Sub Test()

Dim lr As Long, lc As Long, rng As Range

With ThisWorkbook.Sheets("wording")

    'Get last used row and column
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    lc = .Cells(1, .Columns.Count).End(xlToLeft).Column

    'Set your range object
    Set rng = .Range(.Cells(1, 1), .Cells(lr, lc))

    'Set your ReplaceFormat
    With Application.ReplaceFormat
        .Clear
        .Interior.ColorIndex = 26
    End With

    'Replace formatting to cells with trailing and leading spaces
    rng.Replace What:=" *", Replacement:="", SearchFormat:=False, ReplaceFormat:=True
    rng.Replace What:="* ", Replacement:="", SearchFormat:=False, ReplaceFormat:=True

End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...