#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