24.08.2020 Views

Programando o Excel ® Vba Para Leigos - 2ª Ed 2013 NoDRM (1)

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

194 Parte III: Conceitos de Programação

Sub SelectionSqrt()

Dim cell As Range

Dim ErrMsg As String

If TypeName(Selection) <> “Range” Then Exit Sub

On Error GoTo ErrorHandler

For Each cell In Selection

cell.Value = Sqr(cell.Value)

Next cell

Exit Sub

ErrorHandler:

Select Case Err.Number

Case 5 ‘Negative number

Resume Next

Case 13 ‘Type mismatch

Resume Next

Case 1004 ‘Locked cell, protected sheet

MsgBox “Cell is locked. Try again.”,

vbCritical, cell.Address

Exit Sub

Case Else

ErrMsg = Error(Err.Number)

MsgBox “ERROR: “ & ErrMag, vbCritical, cell,

Address

Exit Sub

End Select

End Sub

Quando ocorre um erro em tempo de execução, a execução pula para o

código iniciando no rótulo ErrorHandler. A estrutura Select Case (eu

discuto esta estrutura no Capítulo 10) testa três números comuns de

erros. Se o número do erro for 5 ou 13, a execução retorna na declaração

seguinte (em outras palavras, o erro é ignorado). Porém, se o número do

erro for 1004, a rotina informa ao usuário e depois termina. O último

caso, um punhado de erros não previstos captura todos os outros erros e

exibe a mensagem de erro atual.

Um Erro Intencional

Às vezes, você pode usar um erro em seu benefício. Por exemplo,

suponha que você tem uma macro que só funciona se determinada

pasta de trabalho estiver aberta. Como você pode determinar se aquela

pasta de trabalho está aberta? Uma maneira é escrever código que faça

loops através da coleção Workbooks verificando, para determinar se a

pasta de trabalho na qual está interessado está naquela coleção.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!