Excel VBA – сделайте что-нибудь, если ячейки в диапазоне начинаются с определенной строки

Я пытаюсь выделить все ячейки в столбце A диапазоном, если значение ячейки начинается с 5 пробелов. В настоящее время это то, что я пытаюсь; выдает код ошибки: Run-time error '13': Type mismatch

Sub Bold ()
Set BoldRange = Sheets("Formatted Data").Range("A13:A100000")
    
    If BoldRange.Value Like "     *" Then
       BoldRange.Font.Bold = True
    End If
End Sub

Обратите внимание: ошибка возникает в режиме онлайн If BoldRange.Value Like " *" Then. Не слишком уверен в том, что я делаю не так?

Для этого вам придется перебирать диапазон ячейка за ячейкой с помощью цикла For....Next.

Black cat 23.05.2024 16:00
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
1
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как было предложено выше, я модифицировал использование цикла For...Next.

Sub Bold ()
Dim rcell As Range, BoldRange As Range
Set BoldRange = Sheets("Formatted Data").Range("A13:A100000")

For Each rcell In BoldRange.Cells
    If rcell.Value Like "     *" Then rcell.Font.Bold = True
Next rcell
End Sub

Несколько советов, которые помогут сделать ваш код более эффективным.

  • Обрабатывать только диапазон, в котором есть данные
  • Загрузка данных в массив и проверка их значения
  • Применить стиль шрифта сразу

Документация Майкрософт:

Свойство Range.End (Excel)

Метод Application.Union (Excel)

Sub Bold()
    Dim rcell As Range, dataRange As Range, BoldRange As Range
    Dim lastRow As Long, oSht As Worksheet
    Set oSht = Sheets("Formatted Data") ' modify as needed
    lastRow = oSht.Cells(oSht.Rows.Count, "A").End(xlUp).Row
    Set dataRange = oSht.Range("A13:A" & lastRow)
    Dim arrData: arrData = dataRange.Value
    Dim i As Long
    For i = LBound(arrData) To UBound(arrData)
        If arrData(i, 1) Like "     *" Then
            If BoldRange Is Nothing Then
                Set BoldRange = oSht.Cells(i, 1)
            Else
                Set BoldRange = Application.Union(BoldRange, oSht.Cells(i, 1))
            End If
        End If
    Next i
    If Not BoldRange Is Nothing Then
       BoldRange.Font.Bold = True
    End If
End Sub

Если я попробую это в новой книге, она будет работать отлично, однако, если я попробую это в своей текущей книге, все в столбце A будет выделено жирным шрифтом. Есть идеи, почему это может происходить?

cgwoz 23.05.2024 17:43

Вы проводили тестирование в тех же условиях If и с тем же набором данных? например. If arrData(i, 1) Like "abc*" Then

taller 23.05.2024 18:00

Да, оба одинаковые. Однако я не знаю, сможете ли вы определить это без моей настоящей рабочей тетради, поэтому не думаю, что открою эту банку с червями! Ваше решение по-прежнему работает, и, скорее всего, проблема вызвана чем-то скрытым в моей книге. Цените помощь в этом!

cgwoz 23.05.2024 18:03

Трудно ответить. Вы можете отладить код шаг за шагом (нажмите F8 в VBE, чтобы запустить код) и проверить значение arrData(i, 1).

taller 23.05.2024 18:06

Что ты нашел? Что с этим не так?

taller 23.05.2024 18:15

Отладка всего макроса ничего не дает, пока я не дойду до последней строки If Not BoldRange Is Nothing Then BoldRange.Font.Bold = True. Тогда кажется, что вся моя колонка А выделена жирным шрифтом.

cgwoz 23.05.2024 18:24

Если BoldRange не присвоено никакого значения (объект Range), то BoldRange.Font.Bold = True не запустится. Я обновил последний If пункт. Это проще для отладки.

taller 23.05.2024 18:31

Другие вопросы по теме