procedimento.
Sintaxes
On Error GoTo 0
Quando ocorrer um erro, a execuo continua na linha seguinte a linha que ocorreu o
erro.
Quando ocorrer um erro, desvia a execuo para a linha ou seo especificada. A linha
ou seo especificada deve estar no mesmo procedimento em que se encontra a
instruo On Error.
[seo] o rtulo de linha que identifica o incio da seo. Aps o rtulo de linha voc
escreve o cdigo que vai tratar o erro ocorrido.
Sintaxe Genrica
Sub Exemplo()
End Sub
Observao1: Para evitar que o cdigo de tratamento de erro seja executado quando
no ocorreram erros, coloque uma instruo Exit Sub ou Exit Function imediatamente
antes da rotina de tratamento de erro, como no exemplo acima.
Cada erro gerado no Visual Basic est associado a um nmero e tem uma descrio.
Para identificar um erro ocorrido usamos o objeto Err, que registra o nmero do erro, a
mensagem de erro e de onde o erro procede. As principais propriedades do objeto Err
que utilizaremos so:
Conhecendo o nmero do erro voc pode determinar o tipo de erro e tomar a deciso
quanto ao seu tratamento.
Aps tratar o erro, voc dever concluir o tratamento com uma instruo que elimine o
erro. Caso contrrio o prprio tratamento de erros ir gerar um novo erro. Na sintaxe
genrica acima, a instruo que eliminou o erro foi a instruo Resume Next. Abaixo
esto as principais instrues utilizadas para eliminar um erro.
Resume Next
Resume
Resume [seo]
Resume [linha]
On Error
Err.Clear
Exemplo
Escrevemos duas rotinas de tratamentos de erro, uma para cada erro. Poderamos ter
usado apenas uma rotina para solucionar os dois erros. No entanto, h vrias maneiras
de resolver.
Quando passamos ao 2 erro (clula protegida), o cdigo ser desviado para a segunda
rotina de tratamento. Ela ir desproteger a planilha e repetir a execuo do cdigo, que
ento funcionar e ir alterar o valor da clula B5.
Veja o fluxograma do processo:
Sintaxes
On Error GoTo 0
Quando ocorrer um erro, a execuo continua na linha seguinte a linha que ocorreu o
erro.
Quando ocorrer um erro, desvia a execuo para a linha ou seo especificada. A linha
ou seo especificada deve estar no mesmo procedimento em que se encontra a
instruo On Error.
[seo] o rtulo de linha que identifica o incio da seo. Aps o rtulo de linha voc
escreve o cdigo que vai tratar o erro ocorrido.
Sintaxe Genrica
Sub Exemplo()
Observao1: Para evitar que o cdigo de tratamento de erro seja executado quando
no ocorreram erros, coloque uma instruo Exit Sub ou Exit Function imediatamente
antes da rotina de tratamento de erro, como no exemplo acima.
Cada erro gerado no Visual Basic est associado a um nmero e tem uma descrio.
Para identificar um erro ocorrido usamos o objeto Err, que registra o nmero do erro, a
mensagem de erro e de onde o erro procede. As principais propriedades do objeto Err
que utilizaremos so:
Conhecendo o nmero do erro voc pode determinar o tipo de erro e tomar a deciso
quanto ao seu tratamento.
Aps tratar o erro, voc dever concluir o tratamento com uma instruo que elimine o
erro. Caso contrrio o prprio tratamento de erros ir gerar um novo erro. Na sintaxe
genrica acima, a instruo que eliminou o erro foi a instruo Resume Next. Abaixo
esto as principais instrues utilizadas para eliminar um erro.
Resume Next
Resume
Resume [seo]
Desvia a execuo para a seo de cdigos determinada.
Resume [linha]
On Error
Err.Clear
Exemplo
Escrevemos duas rotinas de tratamentos de erro, uma para cada erro. Poderamos ter
usado apenas uma rotina para solucionar os dois erros. No entanto, h vrias maneiras
de resolver.
Quando passamos ao 2 erro (clula protegida), o cdigo ser desviado para a segunda
rotina de tratamento. Ela ir desproteger a planilha e repetir a execuo do cdigo, que
ento funcionar e ir alterar o valor da clula B5.
' Returns filename with specified extension. If more than one *.INI
' file exists, the first file found is returned.
MyFile = Dir("C:\WINDOWS\*.INI")
' Call Dir again without arguments to return the next *.INI file in
the
' same directory.
MyFile = Dir()
' Return first *.TXT file, including files with a set hidden
attribute.
MyFile = Dir("*.TXT", vbHidden)
ScapeB:
Loop
On Error GoTo 0
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub
Private Sub CommandButton1_Click()
Workbooks.Open ("C:\Documents and
Settings\Administrador\Meus documentos\B.xls")
Worksheets("Plan2").Activate
End Sub
Ficou assim:
Option Explicit
Muito Obrigado!
Private Sub CommandButton1_Click()
Workbooks.Open ("C:\Documents and
Settings\Administrador\Meus documentos\B.xls")
Worksheets("Plan2").Activate
End Sub
Ficou assim:
Option Explicit
Muito Obrigado!
Obs: Veja o meu artigo - VBA - Criando um formulrio de Login - que mostra
como criar um formulrio de login com recurso de criptografar a senha.
Abra ento o Excel 2007 , ser aberta uma planilha em branco. Clique ento
no boto no canto superior a esquerda para abrir o menu principal de opes;
Ser aberta o arquivo Excel exibindo as trs planilhas padro: Plan1, Plan2 e
Plan3; Vamos inserir uma nova planilha com o nome padro de Plan4 clicando
duas vezes no local ou pressionando SHIFT+F11;
Geralmente essa planilha dever conter dados restritos mas no nosso exemplo
iremos apenas exibir a planilha e uma imagem.
Vamos ento realizar os mesmos procedimentos feitos com a planilha Plan1 e incluir
uma controle Imagem nesta planilha e definir uma imagem e um texto;
Para isso vamos usar as clulas A e B e definir os dados conforme a figura abaixo:
Nesta planilha temos dois usurios definidos: Macoratti e Admin e suas respectivas
senhas. Poderamos definir mais usurios a nosso critrio.
Assim que o usurio realizar a autenticao, se ela for bem sucedida iremos gravar as
essas informaes na planilha Plan4.
Dessa forma iremos apenas definir nas clulas A, B e C o contedo conforme imagem a
seguir:
Isso abrira o Editor Visual Basic; No editor Visual Basic clique no menu Inserir
e a seguir em UserForm;
m novo formulrio chamado UserForm ser criado na rea de trabalho do
Editor.
Clique duas vezes no boto Entrar para abrir o evento Click associado a este boto de
comando ou clique com o boto do mouse sobre o boto e a seguir clique em Exibir
Cdigo;
col = 1
lin = 2
While (Plan2.Cells(lin, col) <>
txtLogin)
lin = lin + 1
If lin > 50 Then
MsgBox "Usurio no esta
cadastrado"
Exit Sub
End If
Wend
ActiveWindow.DisplayWorkbookTabs
= False
Hide
End If
End Sub
Clique duas vezes no boto Sair para abrir o evento Click associado a este boto de
comando ou clique com o boto do mouse sobre o boto e a seguir clique em Exibir
Cdigo;
Private Sub
cmdCancelar_Click()
Application.DisplayAlerts
= False
ActiveWorkbook.Save
Application.Quit
End Sub
Private Sub
UserForm_Terminate()
Application.DisplayAlerts
= False
ActiveWorkbook.Save
Application.Quit
End Sub
Para isso temos que usar o evento Activate da pasta de trabalho (WorkBook);
No editor de cdigo VBA clique com o boto direito do mouse sobre o item
EstaPasta_de_trabalho e selecione o item Exibir Cdigo;
A partir do Excel 2002 (Office XP) voc pode habilitar as macros sem
interveno do usurio, com o uso do mtodo AutomationSecurity .
Onde:
msoAutomationSecurityLow
Macros rodam sem verificar o certificado de autenticidade,
equivale a segurana Baixa.
msoAutomationSecurityByUI
O usurio indica se as macros devem ser habilitadas, equivale a
segurana Mdia.
msoAutomationSecurityForceDisable
Desabilita as macros sem certificado de autenticidade, equivale a
segurana Alta.
-**********************************************
Neste artigo vou mostrar alguns conceitos bsicos de como podemos controlar
o Excel 2007 usando VBA - Visual Basic for Applications.
1 - Ex
mostr
ou re
2 - Co
dilog
Op
3 - Ob
Obs: Para saber como criar o cdigo VBA descrito neste artigo leia os
artigos :
Sub EncerraSalvaTudo()
Dim wb As Workbook
For Each wb In Workbooks
wb.Save
Next
Application.Quit
End Sub
Sub EncerraNaoSalvaNada( )
Dim wb As Workbook
For Each wb In Workbooks
' Marca o workbook como salvo
wb.Saved = True
Next
Application.Quit
End Sub
Ao definir a propriedade Saved como True, o Excel 'pensa' que ele no precisa
salvar as alteraes e elas so perdidas quando o Excel for encerrado.
Sub SaiComResume()
Application.SaveWorkspace "Resume.xlw"
Application.Quit
End Sub
2- Bloquear a ao do usurio
s vezes voc quer impedir que os usurios interrompam o Excel enquanto
voc executa alguma tarefa demorada via cdigo. O objeto Application
fornece formas de limitar a interao do usurio a saber:
Sub BloqueiaUsuario()
Dim cel As Range
' exibe o cursor da ampulheta
Application.Cursor = xlWait
' Desabilita a interao do usurio
Application.Interactive = False
Application.ScreenUpdating = False
' Simula uma tarafe longa
For Each cel In [a1:iv999]
cel.Select
Next
' Restaura as configuraes padro
Application.Interactive = True
Application.ScreenUpdating = True
Application.Cursor = xlDefault
[a1].Select
End Sub
Sub OpenCascadeWindows()
ActiveWindow.NewWindow
Application.Windows.Arrange xlArrangeStyleCascade, True
End Sub
Sub CloseMaximize()
ActiveWindow.Close
ActiveWindow.WindowState = xlMaximized
End Sub
Sub ChangeExcelWindowState()
Application.WindowState = xlMaximized
Sleep 1000
Application.WindowState = xlMinimized
Sleep 1000
Application.WindowState = xlNormal
Sleep 1000
Application.DisplayFullScreen = True
Sleep 1000
Application.DisplayFullScreen = False
End Sub
4- Exibindo Dilogos
Existem 3 diferentes tipos de caixas de dilogos no Excel :
Sub AbrirArquivo()
On Error Resume Next
Application.FindFile
If Err Then Debug.Print "O usurio cancelou a operao."
End Sub
Sub AbrirArquivo2()
On Error Resume Next
Application.Dialogs(XlBuiltInDialog.xlDialogOpen).Show
If Err Then Debug.Print "O usurio cancelou a operao."
End Sub
s vezes voc no quer que o Excel execute a sua ao padro aps o usurio
fechar o dilogo, em vez disso, voc prefere obter as informaes a partir do
dilogo para realizar suas prprias aes no cdigo. O exemplo mais comum
disso quando voc deseja obter um nome de arquivo ou pasta. Nesse caso,
usamos o mtodo FileDialog.
Sub AbrirArquivoWeb()
With Application.FileDialog(msoFileDialogFilePicker)
' define as opes da caixa de dilogo
.Title = "Mostra Arquivo Web"
.Filters.Add "Web files (*.htm)", "*.htm;*.html;*.xml", 1
.FilterIndex = 1
.AllowMultiSelect = False
' Se o usurio escolhe um arquivo abre no navegador
If .Show = True Then _
ThisWorkbook.FollowHyperlink .SelectedItems(1)
End With
End Sub
'se no informou
nada e cancelou ento
sai
If strNome = "seu
nome" Or strName =
vbNullString Then
Exit Sub
Else
Select Case
strNome
Case
"Macoratti"
'codigo
Case
"Administrador"
'codigo
Case Else
'codigo
End Select
End If
End Sub
Qual a diferena ?
Sub
Intervalo_DadosN
umero()
Dim vDados
On Error Resume
Next
Application.Displ
ayAlerts = False
vDados =
Application.Input
Box _
(Prompt:="Se
lecione uma
nica clula, " _
& "ou
informe o numero
diretamente.", _
Title:="Qual
a sua idade",
Type:=1 + 8)
On Error GoTo
0
Application.Di
splayAlerts =
True
If
IsNumeric(Dados)
And vDados <> 0
Then
MsgBox
"Voc tem " &
vDados & " anos."
Else
Exit Sub
End If
End Sub
Referncias:
lContador = 1
Range("A1").Select
Selection.End(xlDown).Select
iTotalLinhas = Cells(Rows.Count, 1).End(xlUp).Row + 1
Sub Principal()
blResetarEsttico = True
Debug.Print "---Antes---"
Esttico
Debug.Print "---Depois---"
Esttico
End Sub
Sub Esttico()
lDinmica = lDinmica + 8
lEsttica = lEsttica + 8
End Sub
Application.WindowState = xlMaximized
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
Sheets("ndice").ScrollArea = "A1:A1"
Sheets("Sheet1").CommandButton3.Visible = False
Sub ESCONDE_LINHAS_EIXO_2()
ActiveSheet.Rows("83:147").EntireRow.Hidden = False
ActiveSheet.Rows("83:147").EntireRow.Hidden = True
End If
End SuB
Application.Top = 0
Application.Left = 500
Application.Width = 600
Application.Height = 750
Range("O1:Q20").Select
ActiveWindow.Zoom = True
ESCONDE A LINHA DE TITULO DA JANELA
Sub VLookupFunctionDemo()
Dim d1 As Double
d1 = Application.WorksheetFunction.VLookup("Jake Arrieta", Range("A2:E36"), 5
)
MsgBox Format(d1, "Currency"), , "VBA VLookup Function"
End Sub
ption Explicit
Sub FindLastRow()
Dim iLastRow As Integer
Dim i As Integer
iLastRow = ActiveSheet.Range("a10000").End(xlUp).Row
For i = 1 To iLastRow
ActiveSheet.Range("a" & i) = i & ") " & ActiveSheet.Range("a" & i)
Next i
End Sub
do until IsNumeric(dTimer)=True
dTimer=InputBox("Invalid Entry" & vbnewline & vbnewline & _
"Enter timer interval in minutes","Set Timer") 'minutes
loop
if dTimer<>"" then
do
WScript.Sleep dTimer*60*1000 'convert from minutes to milliseconds
t=MsgBox("Take a Walk." & vbnewline & vbnewline & "Restart Timer?", _
vbYesNo, "It's been " & dTimer &" minute(s)")
if t=6 then 'if yes
'continue loop
else 'exit loop
exit do
end if
loop
end if
ActiveSheet.Shapes.SelectAll
trocar nome do shape
ActiveSheet.Shapes(1).Select
Selection.Name = "MyRedRose"