изменение формата шрифта для каждого листа

#vba #for-loop #foreach #fonts

#vba #for-цикл #foreach #шрифты

Вопрос:

Я как бы застрял с изменением размера шрифта для каждого листа. Я также хочу изменить шрифт на жирный, если значение в столбце «E» меньше 18.

 Dim ws As Worksheet

    ' Loop through all of the worksheets in the active workbook.
    For Each ws In ActiveWorkbook.Worksheets

        ' format font of currently looped worksheet object feferenced by WS
        With ws.Cells.Font
            .Name = "Calibri"
            .Size = 9
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .TintAndShade = 0
            .ThemeFont = xlThemeFontNone


            cr = ws.Cells(.Rows.Count, "A").End(xlUp).Row

            If Cells(cr, 5).Value < 18 Then
                Selection.Font.Bold = True
            End If

        End With

    Next ws
 

Любые советы для меня, чтобы решить проблему.

Я получаю сообщение об ошибке 438 в этой строке:

     cr = .Cells(.Rows.Count, "A").End(xlUp).Row
 

Я также пытался

     cr = ws.Cells(.Rows.Count, "A").End(xlUp).Row
 

Оба кода не работают …Справка

Ответ №1:

Какая у вас ошибка? Я думаю, что приведенный выше код отлично изменит размер шрифта. НО код, меняющий шрифт для ячеек со значением менее 18 на жирный, не работает.

Вы хотите изменить каждую ячейку на жирный шрифт, если правило применяется, верно? Попробуйте «условное форматирование» (будет применяться при каждом изменении значения ячейки и <18) или измените свой код следующим образом (будет применяться при каждом запуске макроса):

 ...
Dim i as integer
cr = ws.Cells(.Rows.Count, "A").End(xlUp).Row
For i = 1 to cr 'loop through all value in column e
       If .cells(i,5).value <18 then .cells(i,5).font.bold = true
Next i
....
 

Комментарии:

1. Не работает, я получаю сообщение об ошибке 438 в следующей строке:

2. cr = ws.Cells(.Rows. Count, «A»).End(xlUp).Row

3. Привет, Тарик, это помогает? cr = .Ячейки (.Строки. Count, «A»).End(xlUp).Строка . Попытайтесь понять, как определить последнюю ячейку в строке, это вам очень поможет. Потому что существует разница между помещением этой строки внутри или снаружи раздела «With»-«End With».

Ответ №2:

Я исправил ответ:

 ' Declare Current as a worksheet object variable.
Dim ws As Worksheet

    ' Loop through all of the worksheets in the active workbook.
    For Each ws In ActiveWorkbook.Worksheets

        ' format font of currently looped worksheet object feferenced by WS
        With ws
            .Cells.Font.Name = "Calibri"
            .Cells.Font.Size = 9
            .Cells.Font.Strikethrough = False
            .Cells.Font.Superscript = False
            .Cells.Font.Subscript = False
            .Cells.Font.OutlineFont = False
            .Cells.Font.Shadow = False
            .Cells.Font.Underline = xlUnderlineStyleNone
            .Cells.Font.TintAndShade = 0
            .Cells.Font.ThemeFont = xlThemeFontNone

            cr = .Cells(.Rows.Count, "A").End(xlUp).Row
            For i = 1 To cr 'loop through all value in column e
                   If .Cells(i, 5).Value < 18 Then .Cells(i, 5).Font.Bold = True
            Next i

        End With

    Next ws