Макрорекордер vs Code Master

Есть такая шутка bash.org. Цензурная версия

<Kuja> я те в сто тыщ раз сожму инфу.
<Kuja> попроси меня рассказать сюжет СантаБарбары — я тебе отвечу — чепуха.

Макрорекордер в Excel — хороший инструмент. Еще лучше, если вы понимаете как его использовать. В начале, когда вы только учитесь программированию на VBA это отличный способ узнать как выполнить ту или иную операцию. Но, как только базовые знания получены, я бы все-таки рекомендовал обратиться к соответствующим книгам, курсам или хотя бы видео.

Давайте приведу пример зачем это может быть нужно.

Описание задачи

Записать в ячейки C4:E7 значение 123
Сделать шрифт полужирным
Покрасить шрифт в красный цвет
Покрасить границы для ячеек

Вот, что будет записано макрорекордером

[code language=»vb»]
Sub Макрорекордер()

‘ Макрос2 Макрос


Range("C4:E7").Select
Selection.FormulaR1C1 = "123"
With Selection.Font
.Color = -16776961
.TintAndShade = 0
End With
Selection.Font.Bold = True
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
End Sub
[/code]

45 строчек кода, Карл! И все это, чтобы выполнить очень простые действия. А вот кусочек кода, написанный с помощью лучших практик.

[code language=»vb»]
Sub Code_Master()
With Range("C4:E7")
.Value = 123
.Font.Color = RGB(255, 0, 0)
.Font.Bold = True
.Borders.LineStyle = xlContinuous
End With
End Sub
[/code]

Всего 6 строк. Сжатие в 7,5 раз, Карл!

PS Можно сделать действие в 4 строки без конструкции With..End With, но так код будет проще поддерживать. Что я имею ввиду?
Представьте себе ситуацию — у вас поменялся диапазон, для которого нужно выполнить действия. В случае с 4 строчками вам нужно будет его поменять в 4х местах, а в конструкции выше — только в 1м.

Оставьте комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.