Indentação

Indentação é um efeito tipográfico de recuar/afastar um texto de sua margem para ressaltar a estrutura das linhas de código de um programa. Seu efeito direto é melhorar a compreensão do código.

Introdução

Veja o código abaixo:

Sub Maturidade()
Idade = InputBox("Qual é sua idade?")
Select Case Idade
Case Is < 18
Mensagem = "Aproveite enquanto ainda é adolescente!"
Case 18 To 30
Mensagem = "Está na hora de fazer um pé de meia e depois casar."
Case Is > 30
Filhos = InputBox("Quantos filhos você tem?")
If Filhos > 0 Then
Mensagem = "As responsabilidades só aumentam, mas vale a pena."
Else
Mensagem = "Não acha que está na hora de ter filhos?"
End If
Case Else
Mensagem = "Valor inválido!"
End Select
MsgBox Mensagem
End Sub

Agora, observe o mesmo código abaixo, reescrito indentado:

Sub Maturidade2()
    Idade = InputBox("Qual é sua idade?")
        
    Select Case Idade
        Case Is < 18
            Mensagem = "Aproveite enquanto ainda é adolescente!"
        Case 18 To 30
            Mensagem = "Está na hora de fazer um pé de meia e depois casar."
        Case Is > 30
            Filhos = InputBox("Quantos filhos você tem?")
            If Filhos > 0 Then
                Mensagem = "As responsabilidades só aumentam, mas vale a pena."
            Else
                Mensagem = "Não acha que está na hora de ter filhos?"
            End If
        Case Else
            Mensagem = "Valor inválido!"
    End Select
    
    MsgBox Mensagem
End Sub

Funcionalmente, os algoritmos são equivalentes. No entanto, o subprocedimento Maturidade2 está mais fácil de ler porque seu código está indentado. Veja que o início de uma estrutura Select Case está afastado da margem uma distância igual ao seu final End Select. Com isso, bastar bater os olhos na estrutura do código para saber onde o essa estrutura de decisão inicia e termina.

Largura da Tabulação da Indentação

Por padrão, a indentação do VBE é de 4 espaços. No entanto, ás vezes utilizo 2 espaços para os códigos caberem no layout do site. Você pode alterar essa configuração clicando no menu Ferramentas >> controle Opções, então na janela que aparecer, clique na guia Editor >> caixa de texto Largura da tabulação:

Não crie códigos com muitos níveis de indentação. Isso é sinal de código mal elaborado e, normalmente, dificulta a leitura e manutenção do código. Nesse caso, você deve quebrar alguns blocos de código do seu procedimento em outros procedimentos.

Indentando o Código

Na janela de código, a tecla Tab aumenta o recuo de um texto e a combinação Shift+Tab diminui. Você pode selecionar várias linhas para alterar o recuo de todas elas de uma vez.

A indentação e inclusão extra de linhas em branco são práticas bastante difundidas no universo de programação e utilizo essas técnicas na minha forma de programar. Recomendo que você faça o mesmo.

Exemplos de Indentação

Não é difícil entender quando indentar. A regra geral é que indenta-se tudo que estiver dentro de um bloco For...Next, If...End If, Select Case...End Select e assim por diante:

Sub GenerateEnumerations()
    Const clIdentSpaces As Long = 2
    
    Dim sAll As String
    Dim ws As Excel.Worksheet
    Dim lCol As Long
    Dim sText As String
    
    Set ws = ActiveSheet
    With ws
        For lCol = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column
            sText = .Cells(1, lCol)
            sText = StrConv(sText, vbProperCase)
            sText = Replace(sText, " ", "")
            sText = Replace(sText, "-", "")
            If sText <> "" Then
                If lCol = 1 Then
                    sAll = sAll & String(clIdentSpaces, " ") & sText & " = 1" & vbNewLine
                Else
                    If .Cells(1, lCol - 1) <> "" Then
                        sAll = sAll & String(clIdentSpaces, " ") & sText & vbNewLine
                    Else
                        sAll = sAll & String(clIdentSpaces, " ") & sText & " = " & lCol & vbNewLine
                    End If
                End If
            End If
        Next lCol
    End With
    
    Debug.Print sAll
End Sub

Se alguma linha for muito longa, quebro-a (usando o símbolo _) e mantenho a indentação no mesmo nível da linha de cima:

Sub pDeleteShapes()
    Dim oShape As Excel.Shape
    Dim ws As Excel.Worksheet
    Dim sName As String
    
    For Each ws In ActiveWindow.SelectedSheets
        For Each oShape In ws.Shapes
            sName = oShape.Name
            Select Case True
                Case sName Like "Comment *"
                Case sName Like "Object *" _
                , sName Like "Text Box *" _
                , sName Like "Button *" _
                , sName Like "Picture *"
                        oShape.Delete
                Case Else
                    MsgBox Prompt:="Atenção, um novo tipo de objeto " _
                    & "'Shape' foi encontrado: " & oShape.Name & ".", _
                    Buttons:=vbExclamation, _
                    Title:=gcstrProgram
                    Stop
            End Select
        Next oShape
    Next ws
End Sub

Indentar é, também, uma arte. Não se preocupe se não conseguir fazer uma indentação perfeita (até porque não é possível) ao desenvolver seu código, e não fique surpreso se você revisitá-lo de tempos em tempos para melhor o aspecto visual do mesmo.

Indentar Automaticamente

Criei um suplemento chamado AmbienteXL que, entre muitas de suas funcionalidades, possui um comando de indentar o código de um módulo ou de um projeto inteiro. Clique aqui para ver mais detalhes.

O AmbienteXL está disponível apenas para o Excel.

Sobre Felipe Gualberto

Microsoft Most Valuable Professional (MVP) de Excel.
Esta entrada foi publicada em Tutoriais e marcada com a tag , , . Adicione o link permanente aos seus favoritos.