Indentação
Autor: Rodrigo Aiosa | Publicado: 2014-12-22T09:24:00-08:00


Introduçã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.











Veja o código abaixo:
Sub pMaturidade()
Idade = InputBox("Qual é sua idade?")
Select Case Idade
Case Is &lt; 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 &gt; 30
Filhos = InputBox("Quantos filhos você tem?")
If Filhos &gt; 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 pMaturidade2()
&nbsp; Idade = InputBox("Qual é sua idade?")
&nbsp;   
&nbsp; Select Case Idade
&nbsp;   Case Is &lt; 18
&nbsp;     Mensagem = "Aproveite enquanto ainda é adolescente!"
&nbsp;   Case 18 To 30
&nbsp;     Mensagem = "Está na hora de fazer um pé de meia e depois casar."
&nbsp;   Case Is &gt; 30
&nbsp;     Filhos = InputBox("Quantos filhos você tem?")
&nbsp;     If Filhos &gt; 0 Then
&nbsp;       Mensagem = "As responsabilidades só aumentam, mas vale a pena."
&nbsp;     Else
&nbsp;       Mensagem = "Não acha que está na hora de ter filhos?"
&nbsp;     End If
&nbsp;   Case Else
&nbsp;     Mensagem = "Valor inválido!"
&nbsp; End Select
&nbsp; 
&nbsp; MsgBox Mensagem
End Sub

Funcionalmente, os algoritmos são equivalentes. No entanto, o subprocedimentopMaturidade2&nbsp;está mais fácil de ler porque seu código está indentado. Veja que o início de uma estrutura&nbsp;Select Case&nbsp;está afastado da margem uma distância igual ao seu final&nbsp;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, pessoalmente utilizo 2 espaços. Você pode alterar essa configuração clicando no menu&nbsp;Ferramentas&nbsp;&gt;&gt; controleOpções, então na janela que aparecer, clique na guia&nbsp;Editor&nbsp;&gt;&gt; caixa de texto&nbsp;Largura da tabulação:



Indentando o Código

Na janela de código, a tecla&nbsp;Tab&nbsp;aumenta o recuo de um texto e a combinação&nbsp;Shift+Tabdiminui. 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&nbsp;For...Next,&nbsp;If...End If,&nbsp;Select Case...End Select&nbsp;e assim por diante:
Sub pGenerateEnumerations()
&nbsp; Const clIdentSpaces As Long = 2
&nbsp; 
&nbsp; Dim sAll As String
&nbsp; Dim ws As Excel.Worksheet
&nbsp; Dim lCol As Long
&nbsp; Dim sText As String
&nbsp; 
&nbsp; Set ws = ActiveSheet
&nbsp; With ws
&nbsp;   For lCol = 1 To .Cells(1, .Columns.Count).End(xlToLeft).Column
&nbsp;     sText = .Cells(1, lCol)
&nbsp;     sText = StrConv(sText, vbProperCase)
&nbsp;     sText = Replace(sText, " ", "")
&nbsp;     sText = Replace(sText, "-", "")
&nbsp;     If sText &lt;&gt; "" Then
&nbsp;       If lCol = 1 Then
&nbsp;         sAll = sAll &amp; String(clIdentSpaces, " ") &amp; sText &amp; " = 1" &amp; vbNewLine
&nbsp;       Else
&nbsp;         If .Cells(1, lCol - 1) &lt;&gt; "" Then
&nbsp;           sAll = sAll &amp; String(clIdentSpaces, " ") &amp; sText &amp; vbNewLine
&nbsp;         Else
&nbsp;           sAll = sAll &amp; String(clIdentSpaces, " ") &amp; sText &amp; " = " &amp; lCol &amp; vbNewLine
&nbsp;         End If
&nbsp;       End If
&nbsp;     End If
&nbsp;   Next lCol
&nbsp; End With
&nbsp; 
&nbsp; 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()
&nbsp; Dim oShape As Excel.Shape
&nbsp; Dim ws As Excel.Worksheet
&nbsp; Dim sName As String
&nbsp; 
&nbsp; For Each ws In ActiveWindow.SelectedSheets
&nbsp;   For Each oShape In ws.Shapes
&nbsp;     sName = oShape.Name
&nbsp;     Select Case True
&nbsp;       Case sName Like "Comment *"
&nbsp;       Case sName Like "Object *" _
&nbsp;       , sName Like "Text Box *" _
&nbsp;       , sName Like "Button *" _
&nbsp;       , sName Like "Picture *"
&nbsp;           oShape.Delete
&nbsp;       Case Else
&nbsp;         MsgBox Prompt:="Atenção, um novo tipo de objeto " _
&nbsp;         &amp; "'Shape' foi encontrado: " &amp; oShape.Name &amp; ".", _
&nbsp;         Buttons:=vbExclamation, _
&nbsp;         Title:=gcstrProgram
&nbsp;         Stop
&nbsp;     End Select
&nbsp;   Next oShape
&nbsp; Next ws
End Sub