Anda di halaman 1dari 45

Observao: Um tratamento de erro automaticamente desativado ao sair do

procedimento.

Sintaxes
On Error GoTo 0

Desativa o tratamento de erros no procedimento atual.

On Error Resume Next

Quando ocorrer um erro, a execuo continua na linha seguinte a linha que ocorreu o
erro.

On Error GoTo [linha ou seo]

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.

[linha] o nmero da linha dentro do procedimento.

[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()

ativa o tratamento de erros


On Error Goto Trata_Erro

ocorre um erro, a execuo desviada para a seo Trata_Erro


Print 1/0

s executar esta linha aps o tratamento de erro


MsgBox Fim do Procedimento.

Exit Sub evita que o tratamento de erro seja executado


quando no ocorrerem erros.
Exit Sub

incio da rotina de tratamento de erros


Trata_Erro:

mensagem de aviso de erro


MsgBox "Diviso por zero"

sai da tratamento de erros e


continua na linha seguinte onde ocorreu o erro.
Resume Next

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.

Observao2: Aps tratar o erro voc poder retornar a execuo do procedimento


usando Resume Next ou GoTo [linha]. Caso contrrio, o procedimento ser encerrado, j
que alcanar a instruo End Sub.

Identificando o tipo de erro

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:

Number: fornece o nmero do erro gerado.


Description: fornece a descrio do erro.
Source: identifica o nome do objeto que gerou o erro.

Conhecendo o nmero do erro voc pode determinar o tipo de erro e tomar a deciso
quanto ao seu tratamento.

Finalizando um tratamento de erros

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

Retorna a execuo na linha seguinte linha que gerou o erro.

Resume

Executa mais uma vez a linha que gerou o erro.

Resume [seo]

Desvia a execuo para a seo de cdigos determinada.

Resume [linha]

Retorna a execuo na linha determinada.

Exit Sub ou Exit Function

Sai da sub-rotina ou funo atual.

On Error

Redefine a lgica de tratamento de erros.

Err.Clear

Elimina o erro sem afetar a execuo do programa.

End Sub ou End Function

Encerra a execuo da sub-rotina ou funo.

Exemplo

Neste exemplo vamos simular dois tipos de erros:

1 erro - Tentativa de abrir um arquivo inexistente;


2 erro - Tentativa de alterar uma clula protegida.

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.

Ao ocorrer o 1 erro (arquivo no localizado), o cdigo ser desviado para a primeira


rotina de tratamento, que apenas contorna o erro, o elimina e continua a execuo
normalmente.

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:

Observao: Um tratamento de erro automaticamente desativado ao sair do


procedimento.

Sintaxes
On Error GoTo 0

Desativa o tratamento de erros no procedimento atual.

On Error Resume Next

Quando ocorrer um erro, a execuo continua na linha seguinte a linha que ocorreu o
erro.

On Error GoTo [linha ou seo]

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.

[linha] o nmero da linha dentro do procedimento.

[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()

ativa o tratamento de erros


On Error Goto Trata_Erro

ocorre um erro, a execuo desviada para a seo Trata_Erro


Print 1/0

s executar esta linha aps o tratamento de erro


MsgBox Fim do Procedimento.

Exit Sub evita que o tratamento de erro seja executado


quando no ocorrerem erros.
Exit Sub

incio da rotina de tratamento de erros


Trata_Erro:

mensagem de aviso de erro


MsgBox "Diviso por zero"

sai da tratamento de erros e


continua na linha seguinte onde ocorreu o erro.
Resume Next
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.

Observao2: Aps tratar o erro voc poder retornar a execuo do procedimento


usando Resume Next ou GoTo [linha]. Caso contrrio, o procedimento ser encerrado, j
que alcanar a instruo End Sub.

Identificando o tipo de erro

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:

Number: fornece o nmero do erro gerado.


Description: fornece a descrio do erro.
Source: identifica o nome do objeto que gerou o erro.

Conhecendo o nmero do erro voc pode determinar o tipo de erro e tomar a deciso
quanto ao seu tratamento.

Finalizando um tratamento de erros

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

Retorna a execuo na linha seguinte linha que gerou o erro.

Resume

Executa mais uma vez a linha que gerou o erro.

Resume [seo]
Desvia a execuo para a seo de cdigos determinada.

Resume [linha]

Retorna a execuo na linha determinada.

Exit Sub ou Exit Function

Sai da sub-rotina ou funo atual.

On Error

Redefine a lgica de tratamento de erros.

Err.Clear

Elimina o erro sem afetar a execuo do programa.

End Sub ou End Function

Encerra a execuo da sub-rotina ou funo.

Exemplo

Neste exemplo vamos simular dois tipos de erros:

1 erro - Tentativa de abrir um arquivo inexistente;


2 erro - Tentativa de alterar uma clula protegida.

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.

Ao ocorrer o 1 erro (arquivo no localizado), o cdigo ser desviado para a primeira


rotina de tratamento, que apenas contorna o erro, o elimina e continua a execuo
normalmente.

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:

Dim MyFile, MyPath, MyName As String


' Returns "WIN.INI" if it exists.
MyFile = Dir("C:\WINDOWS\WIN.INI")

' 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)

' Display the names in C:\ that represent directories.


MyPath = "c:\" ' Set the path.
MyName = Dir(MyPath, vbDirectory) ' Retrieve the first entry.
Do While MyName <> "" ' Start the loop.
' Use bitwise comparison to make sure MyName is a directory.
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
' Display entry only if it's a directory.
MsgBox(MyName)
End If
MyName = Dir() ' Get next entry.
Loop

Boa tarde ffialho


Veja se voc consegue adaptar este cdigo para o teu caso:
Sub Importar_XLS()

Dim sPath As String, sName As String, fName As String


Dim r As Long, rTemp As Long
Dim shPadrao As Worksheet

'Para a macro executar mais rpido!


With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With

'A planilha onde sero colados os dados


Set shPadrao = Sheets("Plan1")

'O caminho onde as planilhas que sero lidas esto


sPath = "C:\relatorios\"

'Descubro o nome do primeiro arquivo a ser aberto


sName = Dir(sPath & "*.xl*")

'Fao o loop que le todos os arquivos


Do While sName <> ""

'Acha a ultima linha utilizada na planilha onde serao


colados os dados
r = shPadrao.Cells(Rows.Count, "A").End(xlUp).Row

'O caminho + o nome do arquivo a ser aberto


fName = sPath & sName

'Abro o workbook a ser lido


Workbooks.Open Filename:=fName, UpdateLinks:=False

'Descubro sua quantas linhas ele possui


rTemp = ActiveWorkbook.ActiveSheet.Cells(Rows.Count,
"A").End(xlUp).Row

'Colo na planilha principal


ActiveWorkbook.ActiveSheet.Range("A1:J" & rTemp).Copy
shPadrao.Range("A" & r + 1)

'Fecho o arquivo j lido


ActiveWorkbook.Close SaveChanges:=False

ScapeB:

'Atualizo a variavel com funcao DIR() que acha o proximo


arquivo nao processado
sName = Dir()

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

Dim strCaminho As String


Dim intPosicao As Integer

Private Sub InsereArquivo_Click()


'Captura o arquivo.
strCaminho = Application.GetOpenFilename("PDF File,*.pdf", 0, "Seleo
relatrio")
'Captura a posio da ltima barra do endereo.
intPosicao = VBA.InStrRev(strCaminho, "\")
'Captura somente o caminho do arquivo.
Me.LabelCaminho.Caption = strCaminho
'Captura somente o nome do arquivo.
Me.LabelNome.Caption = VBA.Right(strCaminho, VBA.Len(strCaminho) -
intPosicao)
End Sub

Private Sub UserForm_Activate()


'Define o diretrio padro.
VBA.ChDrive "C:\"
VBA.ChDir "C:\Users\Rick\Relatrios\Ativos"
End Sub

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

Dim strCaminho As String


Dim intPosicao As Integer

Private Sub InsereArquivo_Click()


'Captura o arquivo.
strCaminho = Application.GetOpenFilename("PDF File,*.pdf", 0, "Seleo
relatrio")
'Captura a posio da ltima barra do endereo.
intPosicao = VBA.InStrRev(strCaminho, "\")
'Captura somente o caminho do arquivo.
Me.LabelCaminho.Caption = strCaminho
'Captura somente o nome do arquivo.
Me.LabelNome.Caption = VBA.Right(strCaminho, VBA.Len(strCaminho) -
intPosicao)
End Sub

Private Sub UserForm_Activate()


'Define o diretrio padro.
VBA.ChDrive "C:\"
VBA.ChDir "C:\Users\Rick\Relatrios\Ativos"
End Sub

Muito Obrigado!

VBA - Criando um formulrio de Login


(revisitado)
Neste artigo vou mostrar como podemos automatizar o Microsoft Excel
usando a linguagem VBA criando um formulrio de login de forma a solicitar a
autenticao do usurio para que ele tenha acesso a uma planilha que
desejamos que tenha um acesso restrito.

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.

uma aplicao simples que mostra aos iniciantes e interessados como


automatizar tarefas no Microsoft Excel usando a linguagem VBA. S isso.

Os recursos usados no projeto deste artigo foram:

Microsoft Excel verso 2007;


Conhecimentos bsicos sobre planilhas , clulas, e Visual
Basic;

Antes de iniciar temos que realizar duas configuraes no Microsoft Excel


2007:

Ativar a guia do desenvolvedor;


Habilitar a execuo de macros;

Obs: A necessidade de habilitar a execuo de macros que por padro, o


Excel coloca um nvel de segurana mais elevado pois cdigos maliciosos
podem ser executados em scripts atravs de macros no Excel.

Vamos ativar a guia do desenvolvedor e logo em seguida habilitar a


execuo de macros.

Para ativar a guia do desenvolvedor (se ainda no estiver ativa) siga os


seguintes passos:

Abra o Excel 2007 e ative o Menu principal de opes clicando no boto


superior a esquerda, conforme a figura abaixo;
A seguir clique na guia Opes do Excel para abrir a janela - Opes do
Excel;
Nesta janela, selecione o item - Mais Usados - e a seguir marque o item -
Mostrar guia Desenvolvedor na Faixa de Opes e clique no boto OK;

No menu do Excel selecione a guia do Desenvolvedor e em seguida clique em


Segurana de Macro;

Na janela Central de Confiabilidade selecione a opo - Configuraes de


Macro - e marque o item para habilitar todas as macros conforme a figura
abaixo:
Pronto , feito isso j podemos iniciar o desenvolvimento da aplicao VBA no
Excel 2007.

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;

Selecione a opo Salvar como e clique no item : Pasta de Trabalho


Habilitada para Macro do Excel;
Em seguida informe o nome do arquivo : VBA_LoginExcel

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;

Agora vamos definir o papel de cada planilha em nosso projeto Excel;

Plan1 - ser a planilha que desejamos acessar e que dever estar


protegida;
Plan2 - ser a planilha onde vamos armazenar os dados do usurio :
login e senha;
Plan3 - ser a planilha que ser apresentada quando abrirmos o arquivo
Excel servindo como fundo para formulrio de Login ;
Plan4 - Usaremos esta planilha para armazenar os dados do usurio que
acessou a planilha e a data de acesso;
Vamos comear com a planilha Plan1
Essa planilha ser exibida somente se o usurio for corretamente autenticado
atravs de Login e Senha;

Geralmente essa planilha dever conter dados restritos mas no nosso exemplo
iremos apenas exibir a planilha e uma imagem.

Vamos incluir um controle Imagem nesta planilha.

Selecione a planilha Plan1 e clique no menu Desenvolvedor e a seguir no


cone Inserir;

Selecione o controle Imagem;


Arraste-o e dimensione-o na planilha Plan1 e a seguir clique na opo
Propriedades para exibir a janela de Propriedades;

Selecione a propriedade Picture e na janela de Dilogo - Carregar Figura -


escolha uma imagem para ser exibida no controle;

Ao final defina a propriedade PictureTiling como True e digite um texto


acima da imagem com os dizeres: Formulrio Principal - rea Restrita;
A planilha final dever ter a seguinte aparncia. (Fique a vontade para colocar nesta
planilha o que melhor lhe convier)

Definindo a planilha Plan3


A planilha Plan3 dever servir apenas como fundo para o formulrio de login que
iremos exibir quando o arquivo Excel for aberto.

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;

Abaixo temos o resultado final da planilha Plan3:

Definindo a planilha Plan2


Na planilha Plan2 vamos armazenar os dados do usurio, seu login e senha.

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.

Definindo a planilha Plan4


A planilha Plan4 ser usada para registrar o acesso feito pelo usurio a senha e a data de
acesso.

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:

Agora que ja definimos o papel e os dados de cada planilha vamos criar o


formulrio de Login.

Criando o formulrio de Login


Com a planilha Excel aberta pressione as teclas ALT+F11. Se preferir clique
no menu Desenvolvedor e a seguir na opo Visual Basic.

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.

Ao seu lado ir aparecer a Caixa de Ferramentas contendo os controles que


vamos usar para criar o formulrio;

sua direita temos a Janela de Propriedades do controle selecionado que


iremos usar para definir o nome e outras propriedades dos controles;

Vamos ento arrastar a partir da caixa de ferramentas os seguintes controles


para o formulrio e a seguir vamos alterar as propriedades indicadas conforme
abaixo:

1 Formulrio = name= frmLogin, Caption= Login e


backColor=&H00000000&(preto)
2 Caixas de Texto : name= txtLogin , name= txtSenha , PasswordChar =
*
2 Rtulos = Caption = Usuario , Caption = Senha
2 Botes de Comando = name= cdmEntrar / Caption=Entrar
, name=cmdCancelar / Caption=Sair
De forma que leiaute do formulrio tenha a seguinte aparncia:

Agora vamos definir o cdigo necessrio para realizar a autenticao do


usurio e assim permitir ou no o seu acesso a planilha Excel Plan1.

Para isso vamos usar o evento Click do boto cmdEntrar.

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;

Digite o cdigo abaixo no evento Click do boto Entrar :

Private Sub cmdEntrar_Click()


If txtLogin = "" Then
MsgBox "Digite o nome do
usurio !"
Exit Sub
txtLogin.SetFocus
Else
If txtSenha = "" Then
MsgBox "Digite a senha
do usurio !"
Exit Sub
txtSenha.SetFocus
End If
End If

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

Dim senha As String


col = 2
senha = Plan2.Cells(lin,
col).Value

If txtSenha <> senha Then


MsgBox "A senha no
confere !!"
Exit Sub
Else
MsgBox "Seja Bem Vindo " &
txtLogin
lin = 2
col = 1
While (Plan4.Cells(lin, col)
<> "")
lin = lin + 1
Wend
Plan4.Cells(lin, 1) =
txtLogin.Value
Plan4.Cells(lin, 2) =
txtSenha.Value
Plan4.Cells(lin, 3) = Date
Plan1.Visible =
xlSheetVisible
Sheets("Plan1").Activate

ActiveWindow.DisplayWorkbookTabs
= False
Hide
End If
End Sub

Vamos entender o cdigo:

If txtLogin = "" Then Verificamos


MsgBox "Digite o nome do se o nome do
usurio !" usurio foi
Exit Sub informado
txtLogin.SetFocus em caso
Else positivo
If txtSenha = "" Then verificamos
MsgBox "Digite a senha se a senha foi
do usurio !" informada.
Exit Sub
txtSenha.SetFocus
End If
End If
Percorremos
a planilha
Plan2 a partir
col = 1 da linha 1 e
lin = 2 coluna 2 e
While (Plan2.Cells(lin, col) <> verificamos
txtLogin) se o valor
lin = lin + 1 igual ao
If lin > 50 Then nome do
MsgBox "Usurio no esta usurio;
cadastrado"
Exit Sub Percorremos
End If at a linha 50
Wend e se nada for
encontrado
ento samos
da rotina;
Se o nome
foi
encontrado
Dim senha As String obtemos a
col = 2 respectiva
senha = Plan2.Cells(lin, senha na
col).Value coluna 2 e
linha onde o
nome foi
encontrado;
If txtSenha <> senha Then Verificamos
MsgBox "A senha no se a senha
confere !!" informada
Exit Sub igual a
Else obtida da
MsgBox "Seja Bem Vindo " & planilha
txtLogin Plan2;
lin = 2
col = 1 Em caso
While (Plan4.Cells(lin, col) positivo
<> "") armazenamos
lin = lin + 1 na planilha
Wend Plan4 os
Plan4.Cells(lin, 1) = valores de
txtLogin.Value login, senha
Plan4.Cells(lin, 2) = e data de
txtSenha.Value hoje;
Plan4.Cells(lin, 3) = Date
Plan1.Visible = Exibimos a
xlSheetVisible planilha
Sheets("Plan1").Activate Plan11
Ativamos a
ActiveWindow.DisplayWorkbookTabs planilha
= False Plan1
Hide e
End If escondemos
a planilha
atual.

Agora vamos definir o cdigo do evento Click do boto cmdSair.

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;

Digite o cdigo abaixo no evento Click do boto Sair :

Private Sub
cmdCancelar_Click()

Application.DisplayAlerts
= False
ActiveWorkbook.Save
Application.Quit
End Sub

O cdigo acima inibe as mensagens de alerta do Excel , salva o workbook e sai do


Excel.

Vamos definir tambm o cdigo do evento Terminate do formulrio frmLogin.


Selecione o formulrio e clique com o boto direito do mouse e a seguir clique em
Exibir Cdigo;

Na janela de cdigo selecione UserForm e o evento Terminate;


A seguir digite o cdigo abaixo neste evento:

Private Sub
UserForm_Terminate()

Application.DisplayAlerts
= False
ActiveWorkbook.Save
Application.Quit
End Sub

Exibindo o formulrio de Login


Queremos que quando o usurio abra a pasta de trabalho, e por consequncia
a planilha, o formulrio de login seja apresentado para informao do usurio
e senha e a planilha Plan3 seja a planilha de fundo.

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 seguir inclua o cdigo conforme mostra a figura baixo no evento Activate do


WorkBook:

O cdigo acima exibe a planilha Plan3 e em seguida o formulrio de login:


Ao informar o usurio e senha corretos exibida uma mensagem de boas
vindas ao usurio:

Na planilha Plan4 vemos os dados que foram armazenados referente ao login


efetuado:
Dessa forma mostramos uma outra forma de criar um formulrio de Login
usando VBA e o Excel.

Pegue a planilha com o cdigo VBA aqui: VBA_LoginExcel.zip

Salmos 5:9 Porque no h fidelidade na boca deles; as suas entranhas so


verdadeiras maldades, a sua garganta um sepulcro aberto; lisonjeiam com
a sua lngua.
Salmos 5:10 Declara-os culpados, Deus; que caiam por seus prprios
conselhos; lana-os fora por causa da multido de suas transgresses, pois
se revoltaram contra ti.

Veja os Destaques e novidades


do SUPER DVD Visual

----------------- habilitar macro automaticamente

A partir do Excel 2002 (Office XP) voc pode habilitar as macros sem
interveno do usurio, com o uso do mtodo AutomationSecurity .

Inclua na resposta ao evento Open da pasta o comando abaixo:

Private Sub Workbook_Open()


Application.AutomationSecurity = msoAutomationSecurityLow
End Sub

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.

-**********************************************

VBA - Controlando o Excel

Neste artigo vou mostrar alguns conceitos bsicos de como podemos controlar
o Excel 2007 usando VBA - Visual Basic for Applications.

A figura a seguir mostra o modelo de objetos do Microsoft Excel. Observe que


no topo da hierarquia de objetos esta o objeto Application. Este objeto
onde tudo se inicia no Excel.
O obje
objeto
Voc

1 - Ex
mostr
ou re
2 - Co
dilog
Op
3 - Ob

Vamos abordar algumas das tarefas realizadas pelo objeto Application.

Obs: Para saber como criar o cdigo VBA descrito neste artigo leia os
artigos :

VBA - Preparando o ambiente


VBA - Criando um projeto no Excel
1- Encerrar o Excel
Utilize o mtodo Quit para fechar o Excel. Se houver qualquer pastas de
trabalho com alteraes no salvas, o Excel exibe uma caixa de dilogo
perguntando ao usurio se essas alteraes devem ser salvas. Existem vrias
maneiras de mudar esse comportamento:

- Salve todas pastas de trabalho antes de sair;


- Defina a propriedade Saved das pastas de trabalho ara True;
- Defina a propriedade DisplayAlerts para False.

A seguir temos um exemplo de cdigo que mostra como salvar todos os


Workbooks abertos antes de fechar sem avisar o usurio:

Sub EncerraSalvaTudo()
Dim wb As Workbook
For Each wb In Workbooks
wb.Save
Next
Application.Quit
End Sub

O cdigo a seguir sai do Excel sem salvar nenhum workbook:

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.

Existe uma outra maneira de fazer isso usando o mtodo SaveWorkspace.


Este mtodo permite que voc salve um arquivo .xlw que voc pode usar para
restaurar os workbooks e janelas atualmente em uso. A seguir o cdigo que
usa este mtodo:

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:

Definir a propriedade DisplayAlerts como False para esconder caixas de


dilogo padro do Excel enquanto o cdigo executado
Definir a propriedade Interactive como False para bloquear os usurios de
Excel completamente;
Definir a propriedade ScreenUpdating como False para ocultar as alteraes
enquanto elas so feitas via cdigo;

Cada uma dessas abordagens deve incluir um cdigo no final do procedimento


para alterar as configuraes de retorno aos seus padres, quando o cdigo
terminar, caso contrrio, voc pode bloquear um usurio permanentemente.

O cdigo VBA abaixo mostra como podemos bloquear a ao de um usurio


enquanto um processamento esta sendo feito:

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

Um dos benefcios da definio de ScreenUpdating como False que o cdigo


anterior executado mais rapidamente, pois o Excel no precisa atualizar a
tela ou rolar a planilha como clulas so selecionadas. Apenas certifique-se de
retornar s atualizaes de tela quando terminar.

3- Abrir e Fechar a janela Excel


O objeto Application fornece uma coleo de objetos Windows que permite
que voc abra, organize, redimensione e feche as janelas filhas do Excel. O
cdigo a seguir abre uma nova janela filha e depois coloca as janelas abertas
em cascata e abre as janelas para a pasta de trabalho ativa:

Sub OpenCascadeWindows()
ActiveWindow.NewWindow
Application.Windows.Arrange xlArrangeStyleCascade, True
End Sub

Voc pode fechar e maximizar janelas filhas usando mtodos no objeto


Window. Por exemplo, o cdigo a seguir fecha a janela aberta no cdigo
anterior e restaura a janela original para um estado maximizado no Excel:

Sub CloseMaximize()
ActiveWindow.Close
ActiveWindow.WindowState = xlMaximized
End Sub

Finalmente, voc pode controlar a janela pai do Excel usando as propriedades


WindowState e DisplayFullScreen do objeto Application. O cdigo abaixo
mostra um exemplo:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

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

Obs: O cdigo acima usa a rotina sleep da API Kernel32.

4- Exibindo Dilogos
Existem 3 diferentes tipos de caixas de dilogos no Excel :

1. As que realizam aes


2. As que retornam informaes
3. E as caixas de dilogos customizadas que voc cria a partir de formulrios
Visual Basic. O objeto Application fornece diversas formas de exibir os dois
primeiros tipos de caixas de dilogos a saber:
Usar o mtodo FindFile para permitir que o usurio selecione um arquivo a
ser aberto no Excel;
Usar a coleo Dialogs para exibir caixas de dilogos do Excel;
Usar o mtodo FileDialog para obter os nomes de arquivos e pastas;
Usar o mtodo InputBox para obter intervalos de frmulas;

1- O cdigo a seguir exibe a caixa de dilogo Abrir e abre o arquivo


selecionado pelo usurio:

Sub AbrirArquivo()
On Error Resume Next
Application.FindFile
If Err Then Debug.Print "O usurio cancelou a operao."
End Sub

Podemos obter o mesmo resultado usando a coleo Dialogs:

Sub AbrirArquivo2()
On Error Resume Next
Application.Dialogs(XlBuiltInDialog.xlDialogOpen).Show
If Err Then Debug.Print "O usurio cancelou a operao."
End Sub

Os dois exemplos acima exibem a caixa de dilogo Abrir e abre um arquivo no


Excel. A coleo Dialogs pode exibir qualquer uma das caixas de dilogo do
Excel (aproximadamente umas 250)

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.

O mtodo FileDialog exibe uma caixa de dilogo Abrir, mas no abre o


arquivo. Voc pode alterar a legenda, o filtro de arquivo e outras
configuraes tambm. O cdigo a seguir usa o FileDialog para abrir um
arquivo da Web no navegador:

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

O mtodo InputBox permite que o Excel Obtenha clulas e frmulas a partir


da seleo do usurio.

A sintaxe para Application.InputBox :InputBox(Prompt, Title, Default,


Left, Top, HelpFile, HelpContextId, Type)

Prompt - String - A mensagem a ser exibida na caixa de dilogo.


Title - Variant opcional. O ttulo da caixa de entrada.
Default - Variant opcional. Especifica um valor que aparecer na caixa de
texto quando a caixa de dilogo for inicialmente exibida.
Left - Variant opcional. Especifica uma posio x para a caixa de dilogo em
relao ao canto superior esquerdo da tela, em pontos.
Top - Variant opcional. Especifica uma posio y para a caixa de dilogo em
relao ao canto superior esquerdo da tela, em pontos.
Help File - Variant - opcional. O nome do arquivo de ajuda para essa caixa de
entrada.
Help ContextId - Variant opcional. O nmero de identificao do contexto do
tpico da Ajuda em HelpFile.
Type - Variant opcional. Especifica o tipo de dados retornado. Se esse
argumento for omitido, a caixa de dilogo retornar texto. Pode ser um dos
valores abaixo ou a soma deles.
O argumento Type do mtodo InputBox determina o tipo de dados que o
usurio pode informar, as configuraes mais comuns so:

Type=0 - uma formula


Type=1 - um nmero
Type=2 - um texto (string)
Type=4 - um valor lgico(True ou False)
Type=8 - uma referncia de clula , como um objeto Range. Obs: Voc precisa
usar a instruo Set para atribuir o resultado a um objeto Range,
Type=16 - um valor no previsto, como #N/A
Type=64 - um array de valores

O cdigo a seguir exibe uma caixa de dilogo solicitando o nome do usurio:


Sub GetNomeUsuario()

Dim strNome As String


strNome =
InputBox(Prompt:="Inf
orme o seu nome: ", _
Title:="QUA
L O SEU NOME",
Default:="seu nome")

'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

Alm do mtodo Application.InputBox existe tambm a funo Inputbox cuja


sintaxe parecida com o mtodo.

Sintaxe de funo: InputBox(prompt[, title] [, default] [, xpos] [, ypos] [,


helpfile, context])

Qual a diferena ?

Ao contrrio da funo InputBox, podemos combinar diferentes tipos (Types)


para o mtodo InputBox e tomar uma deciso com base no seu tipo de dados.

Alm disso o mtodo Application.InputBox permite validao seletiva da


entrada do usurio e aceita objetos, valores de erro e frmulas do Microsoft
Excel.
Veja o exemplo abaixo:

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

No exemplo o usurio poderia clicar na clula para obter sua referncia ou


informar o valor diretamente.
No cdigo usamos On Error Resume Next e Application.DisplayAlerts=False
de forma a no permitir que o Excel trate qualquer entrada invlida ou
cancelamento da operao pelo usurio.

Se o usurio informar um dado invlido, como uma letra ou palavra, o foco


retornar para a caixa de dilogo e sua entrada ser destacada.

Obadias 1:15 Porquanto o dia do Senhor est perto, sobre todas as


naes, como tu fizeste, assim se far contigo; o teu feito tornar
sobre a tua cabea.
Obadias 1:16 Pois como vs bebestes no meu santo monte, assim
bebero de contnuo todas as naes; sim, bebero e sorvero, e
sero como se nunca tivessem sido.
Obadias 1:17 Mas no monte de Sio haver livramento, e ele ser
santo; e os da casa de Jac possuiro as suas herdades.

Referncias:

Seo VB .NET do Site Macoratti.net


Super DVD .NET - A sua porta de entrada na plataforma .NET
Super DVD Vdeo Aulas - Vdeo Aula sobre VB .NET, ASP .NET e C#
Seo C# do site Macoratti.net
Seo VBA do site Macoratti.net
VBA - Visual Basic for Aplications - Macoratti.net
VBA - Cadastro de Clientes (Excel) - Macoratti.net
VBA - Integrando aplicativos Office - Macoratti.net
VBA - Cadastrando clientes e enviando emails - Macoratti.net
VBA - Agenda de Visitas (Excel) - Macoratti.net

Jos Carlos Macoratti

Public Sub lsIdentificaCelulas()


Dim iTotalLinhas As Long
Dim lContador As Long

lContador = 1
Range("A1").Select
Selection.End(xlDown).Select
iTotalLinhas = Cells(Rows.Count, 1).End(xlUp).Row + 1

While iTotalLinhas > lContador


If Left(Cells(lContador, 1).Formula, 1) = "=" Then
Cells(lContador, 2).Value = "Formula: " & Cells(lContador,
1).Formula
Else
If IsNumeric(Cells(lContador, 1)) Then
Cells(lContador, 2).Value = "Numeric"
Else
Cells(lContador, 2).Value = "Text"
End If
End If
lContador = lContador + 1
Wend
End Sub

Dim SearchString, SearchChar, MyPos


SearchString ="XXpXXpXXPXXP" ' String to search in.
SearchChar = "P" ' Search for "P".
' A textual comparison starting at position 4. Returns 6.
MyPos = Instr(4, SearchString, SearchChar, 1)
' A binary comparison starting at position 1. Returns 9.
MyPos = Instr(1, SearchString, SearchChar, 0)
' Comparison is binary by default
' (last argument is omitted).
MyPos = Instr(SearchString, SearchChar) ' Returns 9.
MyPos = Instr(1, SearchString, "W") ' Returns 0.

Sub Principal()

blResetarEsttico = True

Debug.Print "---Antes---"
Esttico

Debug.Print "---Depois---"
Esttico
End Sub

Sub Esttico()

Dim lDinmica As Long


Static lEsttica As Long

If blResetarEsttico = True Then


lEsttica = 0
blResetarEsttico = False
End If

lDinmica = lDinmica + 8
lEsttica = lEsttica + 8

Debug.Print "lEsttica: " & lEsttica


Debug.Print "lDinmica: " & lDinmica

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()

'esconde linha das planilha de eixos - metodo 2

If Rows("83:147").EntireRow.Hidden = True Then

ActiveSheet.Rows("83:147").EntireRow.Hidden = False

ActiveSheet.DropDowns("Drop Down 28").Visible = True

ActiveSheet.DropDowns("Drop Down 109").Visible = True

ElseIf Rows("83:147").EntireRow.Hidden = False Then

ActiveSheet.Rows("83:147").EntireRow.Hidden = True

ActiveSheet.DropDowns("Drop Down 28").Visible = False

ActiveSheet.DropDowns("Drop Down 109").Visible = False

End If

End SuB

COLOCAR JANELA DIMENSIONADA


Application.WindowState = xlNormal

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 HideTitleBar(frm As Object)


Dim lngWindow As Long
Dim lFrmHdl As Long
lFrmHdl = FindWindowA(vbNullString, frm.Caption)
lngWindow = GetWindowLong(lFrmHdl, GWL_STYLE)
lngWindow = lngWindow And (Not WS_CAPTION)
Call SetWindowLong(lFrmHdl, GWL_STYLE, lngWindow)
Call DrawMenuBar(lFrmHdl)
End SuB

- PARA COLOCAR A IMAGEM ATRAS NO USERFORM,CLIQUE COM O BOTO DIREITO E VA EM


RECUAR..

Private Sub UserForm_Activate()


Application.Wait (Now + TimeValue("00:00:01"))
SplashUserForm.Label1.Caption = "Loading Data..."
SplashUserForm.Repaint
Application.Wait (Now + TimeValue("00:00:01"))
SplashUserForm.Label1.Caption = "Creating Forms..."
SplashUserForm.Repaint
Application.Wait (Now + TimeValue("00:00:01"))
SplashUserForm.Label1.Caption = "Opening..."
SplashUserForm.Repaint
Application.Wait (Now + TimeValue("00:00:01"))
Unload SplashUserForm
End Sub

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

Desktop Exercise Reminder


dTimer=InputBox("Enter timer interval in minutes","Set Timer") 'minutes

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"

Anda mungkin juga menyukai