P. 1
Program an Do Em Excel Com VBA 2010

Program an Do Em Excel Com VBA 2010

|Views: 415|Likes:

More info:

Published by: Lenon Eduardo Azevedo on Dec 20, 2011
Direitos Autorais:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

04/01/2013

pdf

text

original

Sections

UERJ / FEN / DEIN

C. Borges; H. Rocha

Programando em Excel com VBA
Pág. Sub-rotinas ou Macros Editor do VBA Linguagem orientada a objeto Variáveis e constantes Funções Caixa de mensagem (MsgBox) e caixa de entrada (InputBox) Estruturas de controle Aprimorando objetos, propriedades e métodos Escopo de variáveis, constantes e procedimentos Exercícios Importando dados e limpando o código gravado Exercício final: Fluxo de caixa em macro Depuração no VBA 02 04 07 13 17 20 24 31 42 45 51 56 58

Programando em Excel com VBA

1

UERJ / FEN / DEIN

C. Borges; H. Rocha

Sub-rotinas ou macros
Uma macro ou sub-rotina é um pequeno programa com um conjunto de instruções. Estas instruções são escritas numa linguagem denominada Visual Basic for Applications (VBA). Usando o VBA podemos acelerar a realização de qualquer tarefa no Excel.

As sub-rotinas são procedimentos delimitados pelas palavras-chave Sub e End sub. Sua declaração tem a seguinte estrutura: Sub <nome_da_macro> ( ) <corpo_da_macro> End Sub Estas sub-rotinas ou macros são designadas pelo nome que lhe atribuímos e não recebem parâmetros do exterior. O corpo da macro é composto por um conjunto de instruções, sendo que cada instrução diferente necessita de estar numa linha diferente. Contudo, quando se trata de instruções demasiado grandes pode-se fazer sua partição em diversas linhas, recorrendo ao operador “_”, de modo facilitar a leitura. Por exemplo, o procedimento seguinte torna B5 a célula ativa e, em seguida, a formata com negrito. Sub SetActive() Worksheets("Plan1").Activate Worksheets("Plan1").Range("B5").Activate ActiveCell.Font.Bold = True End Sub

Como outro exemplo, se você desejar inserir uma fórmula na célula D6 usando o Visual Basic, você não terá que selecionar o intervalo D6. Você precisa apenas retornar o objeto Range e, em seguida, definir a propriedade Formula com a fórmula desejada, conforme mostrado no exemplo seguinte. Sub EnterFormula() Worksheets("Plan1").Range("D6").Formula = "=SUM(D2:D5)" End Sub

Programando em Excel com VBA

2

UERJ / FEN / DEIN

C. Borges; H. Rocha

Gravador de macros O ambiente do VBA possui um gravador que registra todas suas ações tanto numa planilha quanto num processador de texto e que as traduz para a linguagem VBA. A gravação de macros é muito útil quando você não tem experiência suficiente para escrever linhas de código em uma macro. Entretanto, possui graves limitações que somente são resolvidas por meio da programação. Gravando a primeira macro 1. Abra um novo arquivo e selecione uma das planilhas 2. Clique na célula A1 3. Acione o gravador de macro selecionando Ferramentas / Macro / Gravar nova macro. 4. Na caixa de diálogo que surge nomeie a macro por “Absoluta” e atribua a ela o atalho Ctrl+a. Clique OK. Observe que deverá surgir na tela uma barra de ferramentas contendo dois botões: o primeiro, “Parar gravação”, e o segundo, “Referência relativa”. Certifique-se de que este último botão não esteja acionado. 5. Clique na célula A2 e escreva UERJ 6. Clique na célula A3 e escreva FEN 7. Clique na célula A4 e acione o botão Parar gravação. 8. Para testar a gravação, apague o que foi digitado nas células e posicione o cursor em qualque célula da planilha 9. Tecle Ctrl+a e observe. 10. Limpe novamente as células, posicione o cursor agora em uma outra célula qualquer e tecle novamente Ctrl+a. 11. Observe que a macro insere o texto digitado na mesma posição, independentemente de onde esteja o cursor. Gravando uma macro com referências relativas Repita os passos anteriores, com as seguintes modificações: na etapa 4, nomeie a macro por “Relativa” e atribua a ela o atalho Ctrl+r. Clique o botão OK e logo depois clique o botão de Referência relativa. Siga os demais passos como na gravação anterior. Teste a gravação e observe. Compare com a macro “Absoluta”. Ao final, grave o arquivo com o nome Abs_vs_Relativa.

Programando em Excel com VBA

3

UERJ / FEN / DEIN

C. Borges; H. Rocha

Editor do VBA
As macros gravadas acima são convertidas em instruções que podem ser visualizadas e editadas em um ambiente de programação, o Editor do Visual Basic (Visual Basic Editor, VBE). O modo mais fácil de entrar no VBE é teclando o atalho Alt+F11. Um outro modo é selecionando Ferramentas / Macro / Editor do Visual Basic. Seguindo qualquer um desses passos, encontraremos à direita do painel que se abre as linhas de código das duas macros até o momento gravadas. À esquerda poderemos encontrar uma janela denominada Project Explorer ou mesmo Project Browser. Esta janela se assemelha ao Windows Explorer e permite que exploremos os arquivos que estiverem abertos no Excel, assim como os códigos que eles contêm. Podem haver diversas pastas abertas por outros programas que se instalam como módulos de macro no MS Office, tal como o Adobe PDF Writer e outros. O arquivo ou pasta que salvamos contendo as macros gravadas aparece como um projeto VBA e contém dois folders. O primeiro, Microsoft Excel Objetos, concentrará os códigos que forem construídos na pasta e em suas planilhas. O segundo, Módulos, registra os módulos onde são escritas ou gravadas as linhas de código das macros. Inicialmente, poderemos ter um único módulo, ou mesmo dois, dependendo de como realizamos a gravação das macros. Além disso, podemos inserir novos módulos. Visualizando as linhas de código das macros gravadas Com o VBE aberto, visualize as macros gravadas. Caso não estejam aparecendo, dê um duplo clique no Módulo1, no Project Explorer. Veja abaixo as linhas de código criadas. Compare a macro Absoluta com a macro Relativa e identifique as diferenças. Faça pequenas mudanças nos códigos e observe seus efeitos na execução das duas macros. Podemos proceder à execução de uma macro estando no ambiente VBE. Basta colocarmos o cursor em qualquer linha do código da macro e teclarmos F5 ou selecionarmos Executar / Executar Sub. Uma macro sempre começa com a declaração Sub, seguida de seu nome e os parêntesis (). A última declaração é End Sub. As linhas que começam com apóstrofo são linhas de comentários e não são interpretadas quando da execução do programa.

Sub Absoluta() ' ' Absoluta Macro ' Macro gravada em 21/7/2006 por Administrador Programando em Excel com VBA 4

UERJ / FEN / DEIN

C. Borges; H. Rocha

' ' Atalho do teclado: Ctrl+a ' Range("A2").Select ActiveCell.FormulaR1C1 = "UERJ" Range("A3").Select ActiveCell.FormulaR1C1 = "FEN" Range("A4").Select End Sub ______________________________________________________ Sub Relativa() ' ' Relativa Macro ' Macro gravada em 21/7/2006 por Administrador ' ' Atalho do teclado: Ctrl+r ' ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "UERJ" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "FEN" ActiveCell.Offset(1, 0).Range("A1").Select End Sub

Criando um botão de macro Quando desejamos executar uma macro em uma planilha, estando esta maximizada, podemos usar as teclas de atalho da macro ou podemos selecionar Ferramentas / Macro / Macros, marcar a macro desejada e clicar o botão Executar. Entretanto, podemos formatar um botão de acionamento específico para cada macro de nossa planilha, tornando supérflua a memorização de teclas de atalho. Para criar um botão de macro, torne visível a barra de ferramentas de Formulários. Clique no ícone de Botão de comando e desenhe um botão de comando em algum lugar da planilha. Uma caixa de diálogo irá se abrir automaticamente, solicitando que seja informada qual macro deverá ser correlacionada a este botão.

Programando em Excel com VBA

5

Borges. Pequenas dicas sobre o VBE 1. podemos recortar. Teclando F2 será aberto o Pesquisador de Objeto ou Object Browser. ou mesmo excluído. Rocha Formatando o botão de macro Se clicarmos com o botão direito do mouse sobre o botão de macro. Como em um processador de texto. será aberta uma janela de Ajuda sobre este comando. este pode ser arrastado e redimensionado. Sua fonte pode ser formatada e o nome do botão pode ser alterado. H.UERJ / FEN / DEIN C. Se colocarmos o cursor sobre uma palavra-chave ou comando e teclarmos F1. Uma macro pode ser facilmente executada em ambiente VBE. se colocarmos o cursor sobre o código da macro e teclarmos F5. 3. ferramenta de consulta para a edição de macros no VBE 4. copiar ou deletar palavras das linhas de código de uma macro Programando em Excel com VBA 6 . 2.

xls”). Se tivermos uma coleção de bolas de diversos tipos.xls”). esta instrução seria escrita assim: Bola. Form. podemos definir que a bola de futebol é a que será chutada. Worksheet e Range. mas provavelmente você precisará conhecer de imediato apenas um pequeno grupo de objetos.Workbooks(“Dados.Sheets(1). sendo por isso a linguagem VBA denominada “orientada a objeto”. uma janela do Windows é um objeto.xls seria de acordo com a expressão abaixo: Application. Nesta linguagem. Como exemplo. o arquivo.Workbooks(“Dados. conforme abaixo: Bolas(“Futebol”). Por exemplo.UERJ / FEN / DEIN C. O programa Excel pode conter diversas pastas (Workbooks) abertas. a figura. Bola é o objeto é Chutar é um método associado ao objeto Bola. chutar a bola. Definamos objeto como uma parte de um ambiente virtual que possui certas propriedades e funções (ou métodos). Bill Jelen “Mr. H.Sheets(1) Como outro exemplo. para ilustrar como a linguagem VBA funciona. Borges.Range(“A1”). Workbook. representando o próprio programa Excel. Excel” & Syrstad se utilizam de uma instrução do nosso cotidiano. Application é o objeto do topo hierárquico.Chutar Nesta instrução. Chart e ChartObject também são objetos bastante explorados. referenciar a planilha 1 dentro do arquivo Dados. Também são objetos o gráfico. Rocha Linguagem orientada a objeto Toda programação em macro é baseada em modelos de objetos.Chutar Objetos mais comuns do Excel Objetos são elementos caracterizados por um conjunto de propriedades e que possuem um determinado comportamento. o botão de comando. que contêm inúmeras células. etc. O objeto Range consiste em uma ou mais células de uma planilha. Existem mais de 100 objetos no Excel. A coleção será apresentada no plural. poderíamos registrar na célula A1 da mesma planilha o texto “Receita” da seguinte forma: Application. Os objetos mais comuns do Excel são Application.Value =“Receita” Programando em Excel com VBA 7 . Cada pasta pode conter várias planilhas (Worksheets).

se estivermos concentrados na célula A1 da planilha ativa. Sub CloseFirst() Workbooks(1). Workbooks(1) identifica o primeiro objeto Workbook aberto.Close End Sub Propriedades e métodos de um objeto Um método é uma ação que um objeto pode executar. Além disso. o procedimento a seguir fecha todos os formulários abertos. O objeto Application pode ser omitido. sendo referenciado de forma implícita. a instrução acima ficaria simplificada conforme abaixo: Sheets(1). Activecell é uma propriedade do objeto Worksheet que retorna um objeto Range.xls”). Rocha Entretanto. Exemplos: Programando em Excel com VBA 8 . mas nem sempre. Os itens de uma coleção podem ser identificados por número ou por nome. a expressão pode ficar mais reduzida ainda: Range(“A1”). Borges.Range(“A1”). ou os dados de um gráfico. Por exemplo. No Microsoft Excel. podemos eliminar a referência a Workbooks(“Dados.) Coleção Uma coleção é um objeto que contém uma série de outros objetos. deixando intacta a formatação. (Na verdade. Sub CloseAll() Forms. H. a coleção Forms contém todos os objetos Form de um aplicativo. por exemplo. No Visual Basic. se estivermos interessados somente na pasta que estiver ativa. Por exemplo. do mesmo tipo. geralmente. esta instrução pode ser simplificada. ClearContents é um método que limpa as fórmulas de um intervalo.UERJ / FEN / DEIN C. Trata-se de Activecell.Close End Sub Você também pode manipular toda uma coleção de objetos caso os objetos compartilhem métodos comuns. Por exemplo. no procedimento a seguir. o objeto Workbooks contém todos os objetos Workbook que estiverem abertos.Value =“Receita” Porém.Value =“Receita” Um outro objeto bastante importante é aquele que descreve a célula ativa. Assim.

Para definir o valor de uma propriedade. você pode alterar os valores das suas propriedades.: Worksheets(1) Método Parâmetro (Argumento) Propriedade Verbo Advérbio Object. Excel” & Syrstad comentam que cada método dentro do VBA tem sua lista de parâmetros e que existe uma ordem de definição destes parâmetros.UERJ / FEN / DEIN C. cor ou localização na tela) ou um aspecto do seu comportamento (assim como se ela está ativada ou visível). o procedimento a seguir altera a legenda de um formulário do Visual Basic através da definição da propriedade Caption. Além disso. a definição Programando em Excel com VBA 9 . um ponto.ChartArea. podemos planejar como a ação deverá ser executada.Method Lista parâmetros após o método.ClearContents Charts("Chart1"). H.Property A propriedade pode ter seu valor definido ou simplesmente consultado. Ex. Separa o nome do parâmetro do seu valor com := Adjetivo Object. Para alterar as características de um objeto. Excel” & Syrstad fazem uma analogia entre nossa Gramática e os componentes de uma instrução no VBA. Sub ChangeName(newTitle) myForm. Por exemplo. através de parâmetros. Por exemplo. após a referência a um objeto.Range("A1:G37").Caption = newTitle End Sub “Mr. Borges. Força:=Muita “Mr. conforme tabela a seguir. o nome da propriedade. Rocha Worksheets("Sheet1"). Componente VBA Objeto Coleção Análogo a Nome Nome no plural Nota Normalmente especifica qual objeto da coleção. um sinal de igualdade (=) e o novo valor da propriedade.ClearContents Uma propriedade é um atributo de um objeto que define uma das características do objeto (assim como tamanho. coloque. O separador entre o nome da propriedade e seu valor é o sinal = Voltando ao exemplo da instrução de chutar a bola.Chutar Direção:=Esquerda. nossa instrução poderia ficar assim: Bolas (“Futebol”).

Cabe reforçar que alguns objetos não são do alcance do gravador de macro. na maioria das vezes não precisaremos nos preocupar com esta distinção. Se você deseja manipular uma propriedade de um objeto específico. H. podemos colocar o cursor sobre o seu nome e teclar o atalho F1.UERJ / FEN / DEIN C. que é acionado pelo atalho F2. Borges.: a ordem dos parâmetros de um método pode ser alterada. Felizmente. podemos utilizar a Ajuda no ambiente VBE quando da codificação de uma instrução. Rocha de alguns é opcional. pode gravar a ação que deseja ser transformada em macro. Felizmente.Cor=Branca Nem sempre é fácil diferenciarmos propriedades de métodos para os objetos do Excel. Em seguida. Programando em Excel com VBA 10 . A expressão “Objetos do Microsoft Excel” dará acesso a praticamente todos os objetos que podem ser úteis a quem pretende aprimorar seus conhecimentos em programação VBA. sendo a cor uma das propriedades da bola de futebol. Por último. e não conhece exatamente o nome desta propriedade. Podem ocorrer eventos em resposta a uma ação do usuário ou a um código do programa. como clicar o mouse ou pressionar uma tecla e para a qual você pode escrever código para responder. suas propriedades e métodos. basta analisar as linhas de código criadas pelo gravador. Obtendo informações sobre objetos. A primeira é usar a Ajuda do VBE. O gravador de macro também é um excelente meio de se aprender a programação em VBA. podemos utilizar três fontes que se complementam. Esta alternativa é mais aconselhável para quem está mais familiarizado com o VBA. como por exemplo as bordas ou a cor de fundo de uma célula. Por sua vez. apesar de possuir grandes limitações. Obs. propriedade ou método presente em uma linha de comando de uma macro. propriedades e métodos Para obtermos mais informações sobre os objetos do Excel. podemos também usar o Pesquisador de Objeto no VBE. esta cor poderia ser definida conforme exemplo abaixo: Bolas (“Futebol”). Quando desejamos conhecer os detalhes referentes a um determinado objeto. Um arquivo da Ajuda será aberto imediatamente. É o caso de dois importantes objetos de comunicação entre o programa e o usuário: a caixa de mensagem e a caixa de entrada. Eventos Um evento é uma ação reconhecida por um objeto. desde que eles sejam nomeados (vide adiante as funções MsgBox e InputBox).

Rocha Os eventos de pasta de trabalho entram no módulo EstaPasta_de_trabalho. 3º Automaticamente aparecerá um procedimento na janela de edição cujo nome será Worksheet_Open. visível no Project Explorer. Os eventos em nível de planilha. O exemplo seguinte ajusta o tamanho das colunas de A até F sempre que a planilha é recalculada.AutoFit End Sub Como outro exemplo. os eventos de planilha entram no módulo da planilha que eles afetam (como Plan).Sort Key1:=Range("a1"). Exemplo: Suponha que você pretenda executar uma macro sempre que abrir uma determinada pasta. Plan1. ocorrem quando uma planilha é ativada ou o usuário altera uma célula de planilha. O exemplo abaixo classifica o intervalo A1:A10 quando a pasta de trabalho é ativada. planilha. A do lado esquerdo indica Geral clique nela e selecione o elemento pasta. os eventos correspondentes ficam disponíveis por meio dos menus suspensos Objeto (à esquerda) e Procedimento (à direita). o menu suspenso Procedimento atuializa a lista de eventos disponíveis para esse objeto. indique o nome da macro desejada. Gráf1 está ativo. Programando em Excel com VBA 11 . folha de gráfico ou gráfico incorporado é ativado.UERJ / FEN / DEIN C. Depois que o objeto é selecionado. o evento Activate ocorre quando uma pasta de trabalho. Private Sub Worksheet_Activate() Range("a1:a10"). Quando um módulo EstaPasta_de_Trabalho. 2º No Editor de Visual Basic. os eventos de gráfico entram no módulo da planilha de gráfico que eles afetam (como Gráf). Borges. Private Sub Worksheet_Calculate() Columns("A:F"). na caixinha da direita selecione o evento Open. 1º Crie a macro que pretende executar. Order:=xlAscending End Sub Os eventos podem ainda fazer chamadas de sub-rotina ou de função fora de seus próprios módulos. na janela Project Explorer selecione o objeto Esta Pasta. Na janela de edição repare nas duas caixinhas que se encontram na parte superior. Tudo o que for escrito no seu conteúdo será executado quando o documento for aberto. H. por exemplo. Neste caso.

Programando em Excel com VBA 12 .UERJ / FEN / DEIN C. Borges. H. clique com o botão direito na guia da planilha e clique em Exibir código no menu de atalho. Selecione o nome do evento na caixa de listagem suspensa Procedimento. Rocha Para visualizar os procedimentos de evento de uma planilha.

648 a 2. de –32. utilizando-se a instrução Dim.79769313486232E308 (positivo ou negativo) Boolean Currency Object Range String Variant 2 8 4 4 1 por caractere 16 Verdadeiro (True) ou Falso (False) Moeda Um objeto do Excel Um conjunto de células Conjunto de caracteres Qualquer tipo de dados Declarando variáveis Podemos formatar variáveis que armazenem diferentes tipos de dados.UERJ / FEN / DEIN C.483. Por sua vez. não podem ser usadas palavras já reservadas pelo VBA.401298E-45 a 3.147.94065645841247E-324 a 1. As regras de nomeação de constantes e variáveis são: o nome deve começar com uma letra. 1. de 4.402823E38 (positivo ou negativo) Date Double 8 8 Datas Número real. de –2. não pode ter mais do que 255 caracteres.483. tais como Range ou Sheet. Por exemplo. na linha a seguir exemplificamos uma declaração de variável: Programando em Excel com VBA 13 .147.767 Números inteiros. Rocha Variáveis e constantes Variáveis De acordo com Cinto & Góes.647 Número real. não pode haver espaços entre caracteres. Isto se faz por meio da declaração de variáveis. constantes são itens nomeados que mantêm um valor constante por toda a execução de um programa. Tipos de dados armazenados nas variáveis Os tipos de dados armazenados em variáveis ou em constantes no VBA são: Tipos de dados Byte Integer Long Single Bytes usados 1 2 4 4 Valor Números sem sinal entre 0 e 255 Números inteiros. mas pode ser alfanumérico. Borges. H.768 a 32. não há distinção entre maiúsculo e minúsculo. variável é um local nomeado da memória onde são guardados dados que podem ser modificados durante a execução do programa.

o VBA tratará este termo como uma possível variável ainda não declarada e o informará. facilitando o entendimento por parte dos outros e a correção de erros por parte do programador. Essa instrução obriga-o a declarar explicitamente todas as variáveis dentro do módulo. intY e intZ são declaradas como tipo Integer.UERJ / FEN / DEIN C. foi formatada para armazenar valores em moeda. Deste modo. Borges. por exemplo. conforme abaixo: Dim Nome As String. o VBA automaticamente assume que esta variável é do tipo Variant. e que uma destas. Caso. caso você queira é possível forçar tal procedimento. Sempre que você declarar as variáveis. mas na verdade a declaração da variável tem diversas vantagens. torna o programa mais organizado. Para especificar um tipo de dados. você deve incluir o tipo de dados para cada variável. Dim intX As Integer. Programando em Excel com VBA 14 . Como mencionado. Na instrução a seguir. Salario As Currency Benefícios na declaração de variáveis Caso não declaremos o tipo referente a uma variável. bastando incluir acima de todos os módulos do programa a instrução Option Explicit. Isto parece vantajoso. Uma outra vantagem importante é a de que o VBA sempre checará se o usuário do programa estará alimentando uma variável com o tipo de dado definido na sua declaração. mas também podem ser declaradas em conjunto. o que é opcional para o VBA. ao longo do programa você digite por engano a palavra RecitaVenda. Idade As Integer. Em primeiro lugar. o VBA o informará caso encontre alguma variável sem declaração. intZ As Integer Variáveis de diferentes tipos de dados podem ser declaradas em separado. intY As Integer. permitindo assim a correção imediata de um erro que de outra forma levaria bastante tempo para ser corrigido. com a declaração de variáveis a macro ocupa menos espaço na memória e é executada mais rapidamente. intY. nomeada ReceitaVenda. a declaração de variáveis é benéfica por diversos motivos. Por último. considere que você declarou todas variáveis de seu programa. esta poderá armazenar dados de qualquer tipo. Por exemplo. intX e intY são declaradas como tipo Variant. o que torna-se perceptível com macros mais pesadas. H. Na instrução a seguir. Rocha Dim IdadeMin As Integer Você pode declarar diversas variáveis em uma instrução. as variáveis intX. apenas intZ é declarada como tipo Integer. intZ As Integer Se você introduz um nome de variável sem qualquer declaração prévia do tipo de dados. Dim intX.

Long. Este pode ser uma planilha. Depois que uma constante tiver sido declarada. Integer. não será possível modificá-la ou atribuir-lhe um novo valor. As constantes do Visual Basic estão listadas na biblioteca de objetos e podem ser visualizadas com o Pesquisador de objeto. etc. Currency. você pode atribuir um nome significativo a um valor. A variável de objeto deve ter as mesmas propriedades e métodos do objeto referenciado. um gráfico.Orientation = xlLandscape Cada constante intrínseca realmente possui um valor numérico particular. você deve incluir o tipo de dados de cada constante. Utilize a instrução Const para declarar uma constante e definir o seu valor. Single. Byte. Borges. No exemplo abaixo podemos buscar na caixa de mensagem o valor da constante xlLandscape (igual a 2). Constantes intrínsecas Uma constante intrínseca é aquela fornecida por um aplicativo. H. Programando em Excel com VBA 15 . Como exemplo de seu uso: ActiveSheet.UERJ / FEN / DEIN C. Você pode tratar uma variável de objeto exatamente como o objeto ao qual ela se refere. As constantes podem ser declaradas como um destes tipos de dados: Boolean. ocorrerá um erro em tempo de compilação (período durante o qual o código-fonte é traduzido em código executável) quando o Visual Basic encontrar um nome de variável que ainda não tenha sido declarada ou que apresente algum erro de digitação (Ajuda do VBA). uma Range. Como você não pode desativar constantes intrínsecas. Declarando constantes Por intermédio da declaração de uma constante. Rocha Caso um módulo inclua a instrução Option Explicit. Date. String ou Variant. xlLandscape (Paisagem) e xlPortrait (Retrato) são duas constantes que definem a orientação de uma página. Você pode declarar diversas constantes em uma instrução. Double. Sub ShowValue() MsgBox xlLandscape End Sub Variável de objeto Variável de objeto é uma variável que contém uma referência a um objeto. Para especificar um tipo de dados. Como você já conhece o valor de uma constante. Como exemplo. pode especificar o tipo de dados em uma instrução Const.PageSetut. não pode criar uma constante definida pelo usuário com o mesmo nome.

como padrão.UERJ / FEN / DEIN C. (1) declare a variável de objeto e (2) atribua a variável de objeto a um objeto. Declarando uma variável de objeto Utilize a instrução Dim ou uma das outras instruções de declaração (Public. deve declarar a variável de objeto como pertencendo a esse tipo de objeto. H.Value = 19 End Sub Você também pode combinar a declaração de uma variável de objeto com a atribuição de um objeto a ele utilizando a palavra-chave New com a instrução Set. as declarações a seguir são válidas: ' Declara MyObject como o tipo de dados Variant. Private ou Static) para declarar uma variável de objeto. Rocha Para criar uma variável de objeto. Dim MyObject As Range Observação Se você utilizar uma variável de objeto sem declará-la primeiro. Por exemplo: Set MyObject= New Object ' Cria e atribui 16 Programando em Excel com VBA . código mais rápido e melhoria em legibilidade. um Object ou um tipo específico de objeto. Borges. o seu tipo de dados será. pois a declaração de tipos de objeto específicos proporciona a verificação automática do tipo. Dim MyObject ' Declara MyObject como o tipo de dados Object. Uma variável que se refira a um objeto deve ser uma Variant. Caso conheça o tipo de objeto específico.Range(“A1:C25”) TheRange. Utilize o tipo de dados Object para criar uma referência genérica a qualquer objeto. Variant. Você pode declarar uma variável de objeto com o tipo de dados Object em situações onde o tipo de objeto específico só se torna conhecido na execução do procedimento. Por exemplo. Atribuindo uma variável de objeto a um objeto Utilize a instrução Set para atribuir um objeto a uma variável de objeto. O exemplo abaixo declara uma variável de objeto e logo depois a atribui a um objeto. Sub ObjTest() Dim theRange As Range Set theRange = ActiveSheet. Dim MyObject As Object ' Declara MyObject como o tipo de dados Range.

A primeira diferença entre elas é que funções geralmente retornam valor. Caso não haja algum. e tem como objetivo executar um conjunto de instruções e produzir um valor final.. Selecionado o módulo. podemos escrever a macro ou a função integralmente ou podemos recorrer ao caminho Inserir / Procedimento para que o VBA crie a estrutura da rotina. Outras não retornam valor. Uma segunda diferença é que podemos criar macros utilizando o gravador de macros. Assim. cada parâmetro poderá ser definido com o tipo de dado respectivo e a função também poderá ser definida com o tipo de dado que ela enviará para o exterior. Borges. ex. Sua declaração tem a seguinte estrutura: Function <nome da função> (<argumento ou parâmetro1>. as funções Rand() e Agora(). algumas funções não precisam de argumentos.. Funções só podem ser criadas no ambiente VBA. como p. Entretanto. a função MsgBox. sempre que se pretender executar uma função é sabido a priori que ela produzirá um valor. pelo número e tipo de argumentos recebidos. Funções Funções são procedimentos delimitados pelas palavras-chave Function e End Function. enquanto sub-rotinas não. Todas as funções utilizadas no Excel são desse tipo. H. …) As <Tipo> Programando em Excel com VBA 17 . Rocha Funções Comparando Funções e Sub-rotinas Funções e sub-rotinas ou macros são constituídas de uma série de instruções do VB que executam ações. Podemos então refinar a definição de uma função: Function <Nome da Função> ( <parâmetro1> As <Tipo>. Isto é.. Para criar uma função ou uma sub-rotina no ambiente VBA é necessário selecionar um módulo na Janela de código. ex.) <nome da função> = <Valor ou expressão> End Function A função é identificada pelo nome. embora possamos criar macros mais refinadas no ambiente VBA. podemos criar um novo módulo selecionando Inserir / Módulo. <argumento2>. Definição do tipo de parâmetros e do tipo da função Todos os elementos de entrada e saída de uma função têm um tipo de dados atribuído.UERJ / FEN / DEIN C. como p.

SaldoLiq As Currency. Caso contrário. Taxa) End Function Observe que o argumento Taxa da função CPMF também deve ser definido como argumento da função Saldo. Rocha <Nome da Função> = <Valor / Expressão> End Function Nota: Se os tipos não forem definidos será assumido por padrão como sendo do tipo Variant.UERJ / FEN / DEIN C. o usuário não será chamado a informar a taxa de juros e o VBA acusará erro. ValorCPMF As Currency. Borges. devemos selecionar Inserir / Função e optar pela categoria Definida pelo usuário. Taxa As Single) As Currency CPMF = Valor * (Taxa / 100) End Function Execução de uma função Uma Função definida pelo usuário poderá ser executada dentro de uma célula numa planilha. Taxa As Single) Saldo = Valor . Uma função dentro de outra função Escreva a função Saldo conforme abaixo: Public Function Saldo(Valor As Currency. Criando uma função Exemplo: Escreva a função CPMF como abaixo: Public Function CPMF(Valor As Currency. H. Taxa) Programando em Excel com VBA 18 . Taxa _ As Single Valor = InputBox("Informe o valor da aplicação") Taxa = InputBox("Informe a taxa % da CPMF") ValorCPMF = CPMF(Valor. à semelhança de qualquer uma outra função do Excel. que utiliza a função CPMF criada. Para executar a função numa célula. Public Sub Calcula_Saldo_Liq() Dim Valor As Currency. Uma função dentro de uma Sub-rotina Escreva a Sub-rotina abaixo. ou dentro de qualquer outra Função ou Sub-rotina.CPMF(Valor. Experimente com a função recém-criada. A sub-rotina e a função CPMF podem ficar num único módulo ou em módulos separados.

Funções de planilha ou Worksheet functions As funções normalmente usadas nas planilhas também podem ser usadas nas macros.Range(“D6”).Formula = ” = Sum(D2:D5)” Porém.Sum(Faixa)” Programando em Excel com VBA 19 .ValorCPMF MsgBox "Saldo Líquido = " & SaldoLiq End Sub Obs.Range(“D6”). caso a Range esteja associada a uma variável objeto (p. Por exemplo. ex. podemos registrar em uma célula a soma de uma Range: Worksheets(1). variável “Faixa” abaixo). Confira. a não ser que o VBA já possua uma função que desempenhe o mesmo papel. Borges.WorksheetFunction. torna-se necessária a propriedade WorksheetFunction: Worksheets(1).: Se a função CPMF fosse de escopo Private.Formula = ” = Application. não seria acessível a sub-rotina de outro módulo que não o seu..UERJ / FEN / DEIN C. H. Rocha SaldoLiq = Valor .

UERJ / FEN / DEIN C. é uma interface de saída que exibe apenas uma mensagem e aguarda que o usuário selecione um botão. Função MsgBox A função MsgBox exibe uma mensagem (Prompt) em uma caixa de diálogo com um ou mais botões. Buttons (parâmetro opcional): Expressão numérica que é a soma de valores que especifica o número e o tipo de botões a exibir. o estilo de ícone a utilizar. As definições do argumento buttons são as seguintes: Constante Valor Descrição Definindo o número e o tipo de botões exibidos: VbOKOnly VbOKCancel VbAbortRetryIgnore VbYesNoCancel 0 1 2 3 Exibe somente o botão OK. Programando em Excel com VBA 20 . Se prompt consistir em mais de uma linha. Exibe os botões OK e Cancelar. a função retorna um integer que indica qual botão foi clicado. buttons. Repetir e Ignorar. H. MsgBox. é uma interface de entrada de dados que exibe uma mensagem e aguarda uma resposta do usuário. você poderá separar as linhas utilizando um caractere de retorno de carro (Chr(13)). Enquanto MsgBox é uma função do VBA. o nome do aplicativo será inserido na barra de título. Exibe os botões Abortar. InputBox pode ser tanto uma função quanto um método. Não e Cancelar. Title (parâmetro opcional): Expressão de seqüência de caracteres exibida na barra de título da caixa de diálogo. InputBox. Borges. Se omitido. Exibe os botões Sim. A segunda. o valor padrão para buttons é 0. como veremos adiante. title) Prompt (parâmetro necessário): expressão exibida como mensagem na caixa de diálogo. A primeira. a identidade do botão padrão e a modalidade da caixa de mensagem. um caractere de alimentação de linha (Chr(10)) ou uma combinação de caracteres de retorno de carro e alimentação de linha (Chr(13) & Chr(10)) entre cada linha. Se você omitir title. Rocha Caixa de mensagem e caixa de entrada O VBA oferece ao usuário duas interfaces de comunicação com o programa ou macro. Quando o usuário seleciona um deles. Sintaxe resumida: MsgBox(prompt.

Definindo o estilo de ícone que aparece na caixa de diálogo: vbCritical vbQuestion vbExclamation vbInformation 16 32 48 64 Exibe o ícone Mensagem crítica. Sub Msg_SalvarAlteracoes() Opcao = MsgBox(“Deseja salvar as alterações?”. Os valores retornados pelo MsgBox são apresentados abaixo. Borges. Constante vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo Valor (integer) 1 2 3 4 5 6 7 Descrição OK Cancelar Abortar Repetir Ignorar Sim Não Cinto e Góes exemplificam abaixo o uso do MsgBox com uma macro que pergunta ao usuário se ele deseja salvar as alterações. Determinando qual botão é o padrão: vbDefaultButton1 vbDefaultButton2 vbDefaultButton3 0 256 512 O primeiro botão é o padrão. Exibe o ícone Mensagem de aviso. com as opções Sim. 3+32+256. Exibe o ícone Mensagem de informação. Exibe os botões Repetir e Cancelar.UERJ / FEN / DEIN C. O terceiro botão é o padrão. H. Exibe o ícone Consulta de aviso. Rocha VbYesNo VbRetryCancel 4 5 Exibe os botões Sim e Não. Não e Cancelar. O segundo botão é o padrão. “Confirmação”) If Opcao = vbYes Then MsgBox(“Clicou em Sim”) Elseif Opcao = vbNo Then MsgBox(“Clicou em Não”) Elseif Opcao = vbCancel Then MsgBox(“Clicou em Cancelar”) End If End Sub Programando em Excel com VBA 21 .

UERJ / FEN / DEIN C. a função InputBox não possui tal argumento. sob a forma de texto (String). Type). H. invertemos a ordem dos parâmetros title e prompt e omitimos buttons. o método Inputbox. Quando escolhemos o botão OK. desde que estes sejam nomeados. Programando em Excel com VBA 22 . Title. Se esse argumento for omitido. uma data ou um valor Booleano. Default (parâmetro opcional): Especifica um valor que aparecerá na caixa de texto quando a caixa de diálogo for inicialmente exibida. Title. um número. o título padrão será "Entrada". ou seja. MsgBox Title:="Caixa de tarefa". dentre outros. Rocha A sequência dos parâmetros (prompt. Default. myNum = InputBox("Entre um número") Método InputBox O objeto Application apresenta. Por exemplo. title) pode ser alterada. Prompt:="Tarefa concluída" Função InputBox A função Inputbox exibe uma caixa de diálogo contendo uma mensagem (Prompt). Esta restrição ao tipo de resposta que o usuário deve fornecer é definida pelo argumento Type. informe um objeto Range. Em distinção ao método InputBox. a função retorna False. Pode ser uma seqüência de caracteres. Sintaxe resumida: InputBox(Prompt. Sintaxe resumida: Application. O exemplo abaixo pede um número ao usuário e atribui à variável myNum o valor digitado por ele. O método InputBox difere da função InputBox porque permite validação seletiva da entrada do usuário. Title (parâmetro opcional): É o título da caixa de entrada. Quando clicamos no botão Cancelar. a função retorna para a macro o valor inserido na caixa de texto. uma caixa de texto e dois botões (OK e Cancelar). Se esse argumento for omitido.InputBox(Prompt. buttons. No exemplo abaixo. Borges. podemos necessitar que o usuário informe à macro um endereço de uma célula ou conjunto de células. Default) Prompt (parâmetro necessário): é a mensagem a ser exibida na caixa de diálogo. a caixa de texto será deixada vazia.

como #N/D Uma matriz de valores Você pode usar a soma dos valores permitidos para Type. Worksheets("Plan1"). funcionando de modo idêntico à função InputBox. Observe que Application. InputBox retorna um objeto Range. Rocha O parâmetro ou argumento Type especifica o tipo de dados retornado. como um objeto Range Um valor de erro.InputBox(prompt:="Selecione uma celula". O exemplo abaixo pede ao usuário que selecione uma célula em Plan1. Borges. H. defina Type como 1 + 2. Se este argumento for omitido. O argumento Type pode ter um dos valores abaixo ou a soma deles. Tal endereço é armazenado na variável “minhacelula”. Comentários 1. Valor 0 1 2 4 8 16 64 Significado Uma fórmula Um número Texto (uma seqüência) Um valor lógico (True ou False) Uma referência a células. Por exemplo. Type:=8) O valor 8 atribuído ao argumento Type assegura que o dado retornado pelo usuário seja um endereço de célula ou conjunto de células (um objeto Range).Activate Set minhacelula = Application. Você precisa usar a instrução Set para atribuir o resultado a um objeto Range (variável objeto). Programando em Excel com VBA 23 . para uma caixa de entrada que possa aceitar tanto texto como números. 2. Quando Type é 8.UERJ / FEN / DEIN C. a caixa de diálogo retornará texto (string).InputBox chama o método InputBox e InputBox sem qualificador de objeto chama a função InputBox.

No caso de ser omitida. comunicando-lhe esse fato. Aplicação Prática: uma aposta A rotina Aposta recebe uma aposta do usuário e mediante o sorteio a realizar pela respectiva função verifica se o jogador ganhou ou não a aposta. a avaliação negativa da condição implica uma saída automática da Instrução If. tendo o mesmo tipo de funcionamento da função SE do Excel. Sintaxe da Estrutura If-Then-Else If < condição > Then < declaração > Else < declaração > End If A instrução Else é opcional numa estrutura If-Then-Else. Estrutura If-Then-Else Esta é a estrutura de controle mais utilizada no Excel. Rocha Estruturas de controle Uma das vantagens de programarmos as macros é a maior habilidade em se automatizar tarefas. Public Sub Aposta() Dim NAposta As Integer Dim NSorteio As Integer NAposta = InputBox("Em que número aposta? (entre 1 e 50)") NSorteio = Sorteio() If NSorteio = NAposta Then MsgBox "Parabéns! Acertou em cheio! O número sorteado foi o " & NSorteio Else MsgBox "Continue a tentar! O número sorteado foi o " & NSorteio End If End Sub Programando em Excel com VBA 24 .UERJ / FEN / DEIN C. As estruturas de controle são bastante comuns às diversas linguagens de programação. que não estão ao alcance do gravador de macros. Borges. O VBA permite que as utilizemos para a construção de macros versáteis. H. Para isto é necessário ser capaz de se controlar o fluxo do programa.

a colocação de mais do que três instruções If aninhadas torna a macro bastante complicada. Else < declaração > End If Programando em Excel com VBA 25 .1) + 1) End Function As instruções If podem ser aninhadas. Rocha __________________________________ Public Function Sorteio() As Integer Sorteio = Int(Rnd() * (50 . colocando uma instrução dentro da outra. Borges. H. A forma geral seria: If < condição > Then If <outra condição> Then < declaração > Else < declaração > End If Else < declaração > End If Entretanto.UERJ / FEN / DEIN C. Sua forma geral é: If < condição > Then < declaração > ElseIf < condição > Then < declaração > ElseIf < condição > Then < declaração > . Instrução adicional ElseIf Esta instrução propõe uma condição alternativa se o teste da condição anterior tiver tido um resultado negativo.

". A classificação pretendida é a seguinte: Idade Menos de 3 anos Dos 3 aos 12 Dos 13 aos 17 Dos 18 aos 25 Dos 26 aos 65 Mais de 65 Classe Etária Bebê Criança Adolescente Jovem Adulto Idoso Public Sub Classe_Etaria() Dim Idade As Integer Idade = InputBox("Introduza a idade: ". "Classificação Etária") If Idade < 3 Then MsgBox "É um bebê. "Classificação Etária" ElseIf Idade <= 65 Then MsgBox "É um adulto.".". .UERJ / FEN / DEIN C.". . "Classificação Etária" ElseIf Idade <= 25 Then MsgBox "É um jovem. . H. Borges. "Classificação Etária" ElseIf Idade <= 12 Then MsgBox "É uma criança.". Rocha Aplicação Prática Pretende-se criar uma macro que classifique etariamente um indivíduo em função da sua idade.". "Classificação Etária" Else 'refere-se ao último ElseIf MsgBox "É um idoso. "Classificação Etária" End If End Sub Programando em Excel com VBA 26 . . . "Classificação Etária" ElseIf Idade <= 17 Then MsgBox "É um adolescente. .

"Classificação Etária" Case Is <= 17 MsgBox "É um adolescente. Veja abaixo.". Public Sub Classe_Etaria_2() Dim Idade As Integer Idade = InputBox("Introduza a idade: ".". Borges. . "Classificação Etária" Case Is <= 12 MsgBox "É uma criança. "Classificação Etária" Case Is <= 65 MsgBox "É um adulto.". H. . "Classificação Etária" Case Else 'caso residual MsgBox "É um idoso. "Classificação Etária" End Select End Sub Programando em Excel com VBA 27 . "Classificação Etária") Select Case Idade Case Is < 3 MsgBox "É um bebê.".". . Rocha Estrutura Select Case Quando necessitamos que o VBA escolha entre várias diferentes opções. Sua forma geral é: Select Case < expressão > Case < expressão > < declaração > Case < expressão > < declaração > Case Else < declaração > End Select Aplicação Prática O problema resolvido com If –Then –Else – ElseIf poderia seria resolvido com a estrutura Select Case.UERJ / FEN / DEIN C. . . "Classificação Etária" Case Is <= 25 MsgBox "É um jovem. .". a estrutura Select Case é a melhor solução.

H. e se por alguma decisão se pretenda sair do loop deve-se incluir a declaração Exit For. Sua sintaxe é apresentada abaixo.Value = "Taxas (%)" Range("A2"). Rocha Estrutura For-Next Esta é uma das estruturas de loop do VBA. For “contador” = < valor inicial> To < valor final > [ Step < valor a incrementar >] < instruções > Next O comando Step e o valor a incrementar são opcionais.Value = Taxa + Contador Next Contador End Sub Obs. Estrutura While-Wend A estrutura While-Wend tem um funcionamento similar ao For-Next. a cada loop podem ser tomadas decisões. Ela realiza um loop um determinado número de vezes. O padrão é o incremento de uma unidade. Borges. sendo talvez a mais utilizada. Sua sintaxe é apresentada abaixo.Value = 0 For Contador = 1 To 20 ActiveCell. While < condição > < declaração > Wend Estruturas de loop: For-Next While-Wend Do-While Do-Until Programando em Excel com VBA 28 . Contador As Integer Taxa = 0 Range("A1"). Public Sub Taxas() Dim Taxa As Integer. Ela utiliza um contador para determinar o número de vezes em que um conjunto de instruções será executado. enquanto uma determinada condição for verdadeira.UERJ / FEN / DEIN C. 0).Offset(Contador. Assim.Activate Range("A1").: As estruturas If-Then-Else e Select Case podem ser aninhadas dentro de um loop. Um exemplo prático: A macro abaixo prepara uma coluna com taxas de juros.

UERJ / FEN / DEIN C. onde um conjunto de instruções é executado enquanto uma condição determinada é atendida. H. A instrução While-Wend lança números aleatórios entre 1 e 10 e totaliza o número de lançamentos necessários até que o apostador acerte. Borges. Do While < condição > < declaração > Loop Uma variação desta estrutura é apresentada abaixo. Public Sub Loteria() Dim Num_Loteria As Integer Dim Aposta As Integer Dim Num_Lanc As Integer Num_Lanc = 0 Num_Loteria = 0 Aposta = InputBox("Introduza a sua aposta! (entre 1 e 10)") While Num_Loteria <> Aposta Num_Loteria = Int(9 * Rnd() + 1) Num_Lanc = Num_Lanc + 1 Beep Wend MsgBox "A sua aposta foi conseguida depois de " & Num_Lanc & " lançamentos" End Sub Estrutura Do-While Trata-se de outra estrutura de loop. Rocha Aplicação prática: Na macro abaixo o usuário é convidado a apostar num número entre 1 e 10. Taxas() e Loteria(). Do < declaração > Loop While < condição > Aplicação prática: utilize essa estrutura para reformatar as macros anteriores. Programando em Excel com VBA 29 . Sua sintaxe é apresentada a seguir.

Rocha Estruturas Do-Until É uma estrutura que se contrapõe à Do-While. Ela executa um conjunto de instruções até que uma determinada condição seja atendida. Sua maior utilidade está no tratamento de erros por meio da instrução On Error GoTo. mais cedo ou mais tarde. apresentada abaixo. Borges. permitindo basicamente que você passe por cima de algumas linhas de código e salte para o ponto desejado.Name = "Planilha" & x Next x Acabaram_Planilhas: MsgBox "Acabaram as planilhas" End Sub Programando em Excel com VBA 30 . mesmo que desconheçamos o número de planilhas que existam nesta pasta. H. Sua sintaxe é apresentada a seguir.UERJ / FEN / DEIN C. ocorre um erro que aciona a instrução GoTo. Public Sub Exemplo_GoTo() Dim x As Integer On Error GoTo Acabaram_Planilhas For x = 1 To 1000 Sheets(x). Estrutura GoTo e Instrução On Error GoTo GoTo é a estrutura de controle mais simples no VBA. Do < declaração > Loop Until < condição > Aplicação prática: utilize também essa estrutura para reformatar as macros Taxas() e Loteria(). Quando não há mais planilhas. O exemplo a seguir é o de um programa que nomeia uma a uma as planilhas da pasta que estivá ativa no Excel. Do Until < condição > < declaração > Loop Esta estrutura também possui uma variação. O programa então é concluído de forma satisfatória. Observe que se trata de um erro que sabemos que ocorrerá.

G9:H16") Range("A:A") Range("1:1") Range("A:C") Range("1:5") Range("1:1.8:8") Range("A:A. Borges. Referir-se a células e intervalos usando a notação A1 Você pode referir-se a uma célula ou intervalo de células no estilo de referência A1 usando o método Range. H. Referência Range("A1") Range("A1:B5") Range("C5:D9.C:C. como inserir uma fórmula ou alterar o formato. 3 e 8 Colunas A. Sub FormatRange() Workbooks("Pasta1"). C e F Programando em Excel com VBA 31 .Sheets("Plan1"). Geralmente. Um objeto Range no Visual Basic pode ser uma única célula ou um intervalo de células. em seguida.Bold = True End Sub A tabela seguinte ilustra algumas referências em estilo A1 usando o método Range. Os tópicos seguintes mostram as maneiras mais comuns de identificar e trabalhar com objetos Range.Range("A1:D5") _ .F:F") Significado Célula A1 Células de A1 até B5 Uma seleção de várias áreas Coluna A Linha 1 Colunas de A até C Linhas 1 até 5 Linhas 1. O procedimento Sub abaixo altera o formato das células A1:D5 para negrito. propriedades e métodos Como fazer referência a células e intervalos Uma tarefa comum ao usar o Visual Basic é especificar uma célula ou intervalo de células e.UERJ / FEN / DEIN C.3:3.Font. fazer algo com elas. Rocha Aprimorando objetos. você pode fazer isso em uma instrução que identifique o intervalo e também altere uma propriedade ou aplique um método.

1) retorna a célula A6 de Plan1.UERJ / FEN / DEIN C.Value = 10 End Sub A propriedade Cells funciona bem para loop através de um intervalo de células porque você pode substituir os números de índice por variáveis. 1). Sub CycleThrough() Dim counter As Integer For counter = 1 To 20 Worksheets("Plan1"). Rows(1) retorna a linha um em Plan1.Bold = True End Sub A tabela seguinte ilustra algumas referências de linha e coluna usando as propriedades Rows e Columns. Referir-se a linhas e colunas Use a propriedade Rows ou a propriedade Columns para trabalhar com linhas ou colunas inteiras. Rocha Referir-se a células usando números de índice Você pode usar a propriedade Cells para referir-se a uma única célula usando números de índice de linha e coluna.Value = counter Next counter End Sub Observação Se você desejar alterar as propriedades ou aplicar um método a todo um intervalo de células de uma só vez. Em seguida. Sub EnterValue() Worksheets("Sheet1").Font. Programando em Excel com VBA 32 . 3). Essa propriedade retorna um objeto Range representando uma única célula. Em seguida. a propriedade Bold do objeto Font do intervalo é definida como True.Rows(1). Essas propriedades retornam um objeto Range representando um intervalo de células. conforme mostrado no exemplo seguinte. use a propriedade Range. Cells(6.Cells(counter.Cells(6. Sub RowBold() Worksheets("Plan1"). a propriedade Value é definida como 10. H. No exemplo seguinte. No exemplo seguinte. Borges.

Rows(5)) myUnion. Rocha Referência Rows(1) Rows Columns(1) Columns("A") Columns Significado Linha um Todas as linhas da planilha Coluna um Coluna um Todas as colunas da planilha Para trabalhar com várias linhas ou colunas ao mesmo tempo.Bold = True End Sub Referir-se a células usando notação de atalho Você pode usar o estilo de referência A1 ou um intervalo nomeado entre colchetes com um atalho para a propriedade Range.ClearContents End Sub __________________________________ Sub SetValue() [MyRange]. três e cinco na planilha um da pasta de trabalho ativa.[A1:B5]. conforme mostrado nos exemplos seguintes. Você não precisa digitar a palavra "Range" nem usar aspas. Rows(3).UERJ / FEN / DEIN C.Value = 30 End Sub Programando em Excel com VBA 33 . combinando várias chamadas à propriedade Rows ou Columns.Activate Dim myUnion As Range Set myUnion = Union(Rows(1). Sub ClearRange() Worksheets("Plan1"). H. Sub SeveralRows() Worksheets("Plan1"). crie uma variável de objeto e use o método Union.Font. Borges. O exemplo seguinte altera para negrito o formato das linhas um.

o qual ativa a pasta de trabalho e a planilha e.Underline = xlDouble End Sub Programando em Excel com VBA 34 . seleciona o intervalo.ClearContents End Sub O exemplo seguinte mostra como o mesmo procedimento seria escrito para a pasta de trabalho ativa. Sub ClearRange() Application.ClearContents End Sub Referir-se a células relativas a outras células Uma maneira comum de trabalhar com uma célula em relação a uma outra célula é usar a propriedade Offset. Sub FormatRange() Range("MyBook.Italic = True End Sub Para selecionar um intervalo nomeado. No exemplo seguinte. digite um nome e. clique na caixa de nome na extremidade esquerda da barra de fórmulas.Offset(1. Sub Underline() ActiveCell. Borges.xls!MyRange" Selection.UERJ / FEN / DEIN C. Referir-se a um intervalo nomeado O exemplo seguinte refere-se ao intervalo chamado "MyRange" na pasta de trabalho chamada "MyBook.xls". use o método GoTo.xls!MyRange"). 3).Font. pressione ENTER. Para nomear um intervalo selecionado.Font. H. em seguida.Goto Reference:="MyRange" Selection. o conteúdo da célula que se encontra uma linha abaixo e a três colunas da célula ativa na planilha ativa é formatado com sublinhado duplo.Goto Reference:="MyBook. em seguida. Sub ClearRange() Application. Rocha Referir-se a intervalos nomeados Os intervalos são mais fáceis de identificar por nome do que por notação A1.

use a propriedade Areas para referir-se ao grupo de intervalos selecionado em uma planilha. O procedimento Sub seguinte limpa o conteúdo de todas as células de Plan1 na planilha ativa. você pode facilmente manipular o intervalo usando o nome da variável. Borges. clique em Usar referências relativas. O exemplo seguinte limpa o conteúdo dos três intervalos de Sheet1.UERJ / FEN / DEIN C. No menu Ferramentas. Sub ClearSheet() Worksheets("Plan1"). o método retorna um objeto Range representando todas as células da planilha. Rocha Observação. Usar a propriedade Range Você pode referir-se a vários intervalos com a propriedade Range colocando vírgulas entre duas ou mais referências.Font.Range("A1:D5") myRange.ClearContents End Sub Referir-se a vários intervalos Usando o método apropriado. Você pode gravar macros que usem a propriedade Offset em vez de referências absolutas. você pode facilmente referir-se a vários intervalos. Sub ClearRanges() Programando em Excel com VBA 35 . Use os métodos Range e Union para referir-se a qualquer grupo de intervalos. H. Referir-se a células usando um objeto Range Quando você define uma variável de objeto para um objeto Range.Bold = True End Sub Referir-se a todas as células da planilha Quando você aplica a propriedade Cells a uma planilha sem especificar um número de índice. atribui a variável ao intervalo A1:D5 de Plan1 na pasta de trabalho ativa. aponte para Gravar macro e. em seguida. O procedimento seguinte cria a variável de objeto myRange e.Cells.Formula = "=RAND()" myRange. Instruções subseqüentes modificam propriedades do intervalo substituindo o objeto de intervalo pelo nome da variável. em seguida. Sub Random() Dim myRange As Range Set myRange = Worksheets("Plan1").

Font.ClearContents End Sub Usar o método Union Você pode combinar vários intervalos em um objeto Range usando o método Union. Rocha Worksheets("Sheet1").ClearContents End Sub Os intervalos nomeados tornam o uso da propriedade Range mais fácil ao trabalhar com vários intervalos. Borges.G9:H16.Bold = True End Sub Loop em um intervalo de células Ao usar o Visual Basic. Sub ClearNamed() Range("MyRange. Sub MultipleRange() Dim r1. Sua sintaxe é apresentada abaixo. define-o com os intervalos A1:B2 e C3:D4 e. For Each < elemento > In < grupo > Programando em Excel com VBA 36 .Range("C3:D4") Set myMultipleRange = Union(r1. myMultipleRange As Range Set r1 = Sheets("Sheet1"). O exemplo seguinte cria um objeto Range chamado myMultipleRange. o conjunto de células de uma planilha ou um intervalo de células de uma Range. você freqüentemente precisa executar o mesmo bloco de instruções em cada célula de um intervalo de células. em seguida. como por exemplo o conjunto de planilhas de um arquivo. Estrutura For Each-Next A estrutura For Each-Next permite executar uma determinada instrução em todos os elementos de uma coleção de objetos.UERJ / FEN / DEIN C. e executa a operação. H. HisRange").Range("C5:D9. você combina uma instrução de loop com um ou mais métodos para identificar cada célula.Range("A1:B2") Set r2 = Sheets("Sheet1"). uma de cada vez. YourRange. r2) myMultipleRange. r2. O exemplo seguinte funciona quando todos os três intervalos nomeados se encontram na mesma planilha. Para fazer isso. formata com negrito os intervalos combinados.B14:D18").

H. definindo como 0 (zero) qualquer número cujo valor absoluto seja menor que 0.01 Then c... Sub TestForNumbers() For Each celul In Range("A1:B5") If IsNumeric(celul. Borges. Public Sub closefiles() For Each celula In Range("Faixa"). o procedimento seguinte.Cells If Abs(c. O exemplo a seguir testa a primeira célula preenchida do intervalo A1:B5 que não contenha um número. Sub RoundToZero3() For Each c In ActiveCell.CurrentRegion.Size = 14 Next End Sub Se você não souber os limites do intervalo pelo qual deseja fazer o loop. Por exemplo.01.UERJ / FEN / DEIN C. Caso não ocorra o erro. Rocha < Instruções > Next Por exemplo.Value) < 0.Value = 0 Next End Sub Saindo de um loop For Each-Next antes de seu término Você pode sair de um loop For Each-Next utilizando a instrução Exit For. utilize a instrução Exit For no bloco de instruções True de uma instrução If. Por exemplo.Else ou uma instrução Select Case que verifica especificamente o erro.Font." Exit For Programando em Excel com VBA 37 . será exibida uma mensagem e Exit For sairá do loop...Cells celula. faz um loop através do intervalo que envolve a célula ativa. quando ocorrer um erro. o procedimento a seguir formata o tamanho da fonte de todas as células de uma Range nomeada “Faixa”. você pode usar a propriedade CurrentRegion para retornar o intervalo que envolve a célula ativa. Se for encontrada uma célula desse tipo.Then. quando executado de uma planilha. a instrução If…Then…Else será False e a execução do loop continuará conforme esperado.Value) = False Then MsgBox "Objeto contém um valor não-numérico.

255. Sub FormatRange() With Worksheets("Planilha1").Cells(counter.Font.Value) < 0.Value = 30 . No exemplo seguinte. você pode substituir o contador do loop (ou outras variáveis ou expressões) pelos números de índice das células.Color = RGB(255. O procedimento faz um loop através de um intervalo C1:C20. a variável counter é substituída pelo índice de linha. definindo como 0 (zero) qualquer número cujo valor absoluto seja menor que 0.01 Then curCell.Value = 0 Next counter End Sub Instrução With A instrução With executa uma série de instruções em um objeto. Borges. O exemplo a seguir preenche um intervalo de células com o número 30. Sub RoundToZero1() For counter = 1 To 20 Set curCell = Worksheets("Sheet1"). Sua sintaxe é: With objeto < instruções > End With As instruções With fazem os seus procedimentos serem executados com mais rapidez e ajudam a evitar digitação repetitiva.Range("A1:C10") .UERJ / FEN / DEIN C. 0) End With End Sub Programando em Excel com VBA 38 ...Interior.Next com a propriedade Cells.Bold = True .01. Usando a propriedade Cells. aplica a formatação negrito e define como amarelo a cor interna das células. 3) If Abs(curCell. Rocha End If Next celul End Sub Uma outra maneira de fazer loop através de um intervalo é usar o loop For. H.

Sintaxe resumida: expressão. O exemplo a seguir insere uma fórmula na célula A1 e.Range("A1"). formata a fonte. em seguida.Cells(1.Find(What) Programando em Excel com VBA 39 . Rocha Para melhor eficiência. Sub MyInput() With Workbooks("Livro1"). você pode aninhar as instruções With.Formula = "=SQRT(50)" With .Name = "Arial" . A primeira define a fórmula em notação de estilo A1. Não afeta a seleção da célula ativa.Size = 8 End With End With End Sub Propriedade Formula e Propriedade FormulaR1C1 Tratam-se de propriedades que permitem a inserção de fórmulas em células ou conjuntos de células.FormulaR1C1 = "=R4C1+R10C1" Worksheets("Sheet1").Bold = True . Borges. 1) . e retorna um objeto Range representando a primeira célula onde essas informações se encontram. A segunda define a fórmula usando notação em estilo L1C1 (R1C1).FormulaR1C1 = "=SQRT(R1C1)" equivale a… Worksheets("Sheet1"). utilizada pelo gravador de macro. Exemplos: Worksheets("Sheet1").Font .Range("B1"). H.Range("B1"). Retorna Nothing se nenhuma coincidência for encontrada. Método Find Localiza informações específicas em um intervalo.Formula = "=$A$4+$A$10" equivale a… Worksheets("Sheet1").Worksheets("Planilha1").Formula = "=SQRT(A1)" As propriedades Formula e FormulaR1C1 são intercambiáveis quando se trata da inserção de constantes ou textos em células.Range("A1").UERJ / FEN / DEIN C.

Os dados pelos quais procurar. Corresponde à posição da célula ativa quando uma pesquisa é feita a partir da interface do usuário.FindNext(After) expressão Obrigatória.UERJ / FEN / DEIN C. Lembre-se de que a pesquisa começa depois desta célula. O exemplo abaixo localiza todas as células do intervalo A1:A500 que contêm o valor 2 e torna essas células cinzas. For Each c In [A1:C5] Programando em Excel com VBA 40 . After Variant opcional. o código seguinte pesquisa todas as células do intervalo A1:C5 que usam uma fonte cujo nome começa com as letras "Cour". Se esse argumento não for especificado. Rocha expressão Obrigatória. ele altera a fonte para Times New Roman..Interior. Quando o Microsoft Excel encontra uma coincidência. What Variant obrigatória. Uma expressão que retorne um objeto Range.Next com o operador Like.Pattern = xlPatternGray50 Set c = . a célula especificada não é pesquisada até que o método dê a volta e chegue à ela. lookin:=xlValues) If Not c Is Nothing Then firstAddress = c.Find(2. Por exemplo. Uma expressão que retorne um objeto Range.Address Do c.Range("a1:a500") Set c = . Observe que After precisa ser uma única célula no intervalo. use uma instrução For Each.FindNext(c) Loop While Not c Is Nothing And c.. Pode ser uma cadeia de caracteres ou qualquer tipo de dados do Microsoft Excel. A célula depois da qual você deseja procurar. Sintaxe expressão. a pesquisa começará após a célula do canto superior esquerdo do intervalo. With Worksheets(1).Address <> firstAddress End If End With Observação: Para encontrar células coincidentes com padrões mais complicados. Borges. H. Método FindNext Continua uma pesquisa que tenha começado com o método Find.

Replacement:="COS". _ SearchOrder:=xlByColumns. Replacement) expressão Obrigatória. Borges. What String obrigatória. A cadeia de caracteres de substituição.UERJ / FEN / DEIN C. H.Replace _ What:="SIN".Name Like "Cour*" Then c. O exemplo abaixo substitui todas as ocorrências da função SIN trigonométrico pela função COS. Replacement String obrigatória.Font.Replace(What. Rocha If c. Uma expressão que retorne um objeto Range. A cadeia de caracteres que você quer que o Microsoft Excel procure. O uso desse método não altera a seleção nem a célula ativa.Font.Name = "Times New Roman" End If Next Método Replace Encontra e substitui caracteres em células dentro do intervalo especificado. MatchCase:=True Programando em Excel com VBA 41 . Worksheets("Plan1").Columns("A"). Sintaxe resumida: expressão. O intervalo de substituição é a coluna A de Plan1.

nível de módulo privado e nível de módulo público. Escopo das variáveis Definindo o escopo em nível de procedimento Uma variável ou constante definida dentro de um procedimento não é visível fora desse procedimento. o escopo no seu código se torna óbvio. para o primeiro procedimento. Quando declaradas públicas. quando privadas. o primeiro procedimento exibe uma caixa de mensagem que contém uma seqüência de caracteres. a variável strMsg é local.UERJ / FEN / DEIN C." MsgBox strMsg End Sub _______________________________________________ Sub OutsideScope() MsgBox strMsg End Sub Definindo o escopo em nível de módulo privado Você pode definir variáveis (e constantes) em nível de módulo na seção Declarações de um módulo. Há três níveis de escopo: nível de procedimento. constantes e procedimentos O escopo ou domínio diz respeito à disponibilidade de uma variável. elas podem ser públicas ou privadas. estão disponíveis somente para os procedimentos naquele módulo. O segundo procedimento exibe uma caixa de mensagem em branco. pois. No exemplo a seguir. Como padrão. o escopo das variáveis declaradas com a instrução Dim ( e o das constantes declaradas por Const) na seção Declarações é privado. H. ou a constante com a expressão PrivateConst. Somente o procedimento que contém a declaração da variável pode utilizá-la. estão disponíveis para todos os procedimentos em todos os módulos de um projeto. Em nível de módulo. quando se precede a variável com a palavra-chave Private. Rocha Escopo ou domínio de variáveis. Programando em Excel com VBA 42 . No entanto. Sub LocalVariable() Dim strMsg As String strMsg = "Esta variável não pode ser utilizada fora deste procedimento. constante ou procedimento para ser utilizado por outro procedimento. Borges.

H. mas em termos de leitura dará uma maior percepção. deverá ser antecedida pela palavra-chave Private. A palavra-chave Private. ' Insere a seção Declarações do módulo. opcional. Contudo este comportamento fica mais explícito pela introdução da palavra-chave Public. opcional. No exemplo a seguir. ela estará disponível para todos os procedimentos no projeto. Public strMsg As String O exemplo a seguir declara a constante Public conIdade como um Integer e atribui a ela o valor 34.UERJ / FEN / DEIN C. Private strMsg As String _______________________________________ Sub InitializePrivateVariable() strMsg = "Esta variável não pode ser utilizada fora deste módulo. Programando em Excel com VBA 43 ." End Sub ________________________________________ Sub InitializePrivateVariable() MsgBox strMsg End Sub Definindo o escopo em nível de módulo público Caso você declare uma variável (ou uma constante) em nível de módulo como pública. a variável de seqüência de caracteres strMsg está disponível para os procedimentos definidos no módulo. para que uma rotina tenha o âmbito do módulo onde está definida. Assim. indica que a rotina é acessível somente a outros procedimentos no módulo em que é declarado. Por padrão as rotinas são de âmbito do projeto. ' Adiciona a seguinte seção Declarações do módulo. Rocha No exemplo a seguir. Funções e Eventos) Sub-rotinas e Funções só têm dois níveis de escopo: o nível do projeto e o nível do módulo. Quando o segundo procedimento for chamado. Borges. a variável de seqüência de caracteres strMsg pode ser utilizada por qualquer procedimento em qualquer módulo do projeto. ele exibirá o conteúdo da variável de seqüência de caracteres strMsg em uma caixa de diálogo. Public Const conIdade As Integer = 34 Escopo ou domínio dos procedimentos (Sub-rotinas. que em termos operacionais não adicionará qualquer funcionalidade.

a palavra-chave Private é automaticamente inserida antes da declaração do procedimento. Quando o Visual Basic cria um procedimento de evento.UERJ / FEN / DEIN C. Rocha Enquanto os procedimentos Função e Sub-rotina são públicos por padrão. Borges. os procedimentos de Evento são de domínio privado. Programando em Excel com VBA 44 . H.

0). Auto-ajuste das colunas. Mudar o atalho da macro. Programando em Excel com VBA 45 .Activate Salve a pasta. Macros. Digite as seguintes linhas de código: MsgBox "Os dados são lançados na Plan3" Worksheets("Plan3").AutoFit Vá à Planilha 1 e digite uma letra qualquer numa das células. Por exemplo. selecione no Project Explorer “EstaPasta_de_trabalho”. H. Rocha Exercícios Lista 1 de Exercícios Usando o gravador de macros e editando macros 1. Evento ao abrir pasta. No Editor VBA. Criar uma macro que auto-ajuste todas as colunas (Columns) sempre que a Planilha1 for alterada (evento Change). Verifique o aparecimento da caixa de mensagem e a ativação da Planilha 3. Verifique. Colocar o cursor em qualquer linha da macro desejada. Abra uma pasta vazia. Executar as macros no Editor VB. Eventos. seguindo os passos Ferramentas . Editando a macro de referências absolutas: no Editor do VBA.FormulaR1C1 = “UERJ” 6.0). Editando a macro de referências relativas: eliminar Range(“A1”) das linhas de comando. Direcionando usuário para uma planilha. 3) 2. Substituir: ActiveCell. 2. 7. Para tal.UERJ / FEN / DEIN C. Substituir a propriedade FormulaR1C1 por Formula. com referências absolutas (pág. Na janela de código. Executar a macro. Nos menus suspensos selecione Worksheet (à esquerda) e Change (à direita).Offset(1.Select ActiveCell. Borges. 5) e nomeá-los.FormulaR1C1 = “UERJ” por: ActiveCell. feche-a e a reabra.Offset(1. Gravando com referências relativas (pág. Eventos. No menu à direita selecione “Open”. selecione Plan1 no Project Explorer. Gravando a primeira macro. Criar botões de macro (pág. 3) 3. alterar os endereços de células que aparecem na primeira macro gravada.FormulaR1C1 = “UERJ” substituindo por uma única linha: ActiveCell. Executar as macros de diferentes modos: Pela planilha Pelo Editor VBA 8. Digite a linha de código: Columns. Opcoes. selecione “Workbook” no menu suspenso à esquerda. Macro.Value = “UERJ” 5. Teclar F8 passo a passo e verificar o efeito na planilha. Programando com eventos 1. substituir Range(“A2”) por Range(“D2”) e executar a macro. 4. Executar. passo a passo. Simplificar as linhas de código abaixo: ActiveCell.

3.Formula = "=sum(A1:A" & UltimaLinha & ")" Lista 3 de Exercícios 1. registre a soma na coluna B. Inclua novos valores de vendas na coluna A e observe que a função Soma não é atualizada. Verifique a macro gravada no Editor VB. substitua a propriedade Select por Row. Observar a sintaxe abaixo e a utilização do operador “&”.UERJ / FEN / DEIN C. eliminando o que for desnecessário. Na macro anterior. Alternativamente. Inclua novos valores de vendas na coluna A e observe novamente. Crie uma macro que calcule a soma destes valores (utilize a função SUM) e registre o resultado na célula A1 (utilize a propriedade Formula). escreva o comando Option Explicit. Verifique como a função aparece na barra de fórmulas na planilha.txt criada pela importação pode ser fechada. Borges. 4. Execute a macro passo a passo teclando F8. Propriedade Row. a sintaxe será: Columns(2). Corrija os possíveis erros presentes no código.txt. Substitua o objeto Selection por Range(“A1”). Função de planilha SUM. Importando dados. Na macro gravada na etapa anterior. Simplifique-o. declare a variável (comando Dim) como Integer. Modifique a macro.ClearContents (limpeza prévia da coluna B recomendável) Range("B" & UltimaLinha). porém na última linha preenchida. Utilize as teclas End + seta para baixo. 7.Formula = "=sum(A1:A" & UltimaLinha & ")" 6. A coluna A da planilha Plan1 possui valores de vendas cujos registros iniciam na linha 2 e cuja linha final é indeterminada. Crie uma macro de evento (Worksheet_SelectionChange) que execute a macro “Vendas” sempre que a planilha Plan1 for modificada. Grave uma macro (de nome “Vendas”) que desça pela coluna até o último valor de vendas. Observe a planilha e a barra de fórmulas. registre na célula B1 a soma dos valores de vendas da coluna A. 2. 5. Utilizar o arquivo Fatura. Acima da macro. Ler o exercício “Importando dados e limpando o código gravado” da apostila e executar a etapa “Preparando para gravar a macro”. Neste caso. Registre valores numéricos quaisquer nas células de A2 até A5. O comando End(xlUp) é mais confiável. A pasta Fatura. inserindo a variável UltimaLinha na função SUM. 2. 8. Propriedade End(xlDown). Armazene o resultado em uma variável (UltimaLinha). Abra uma pasta vazia. Observação: End(xlDown) falha quando só há uma linha preenchida na coluna (verifique!). Programando em Excel com VBA 46 . Rocha Lista 2 de Exercícios Trabalhando com variáveis e inserindo formulas 1. Range("B1"). Na mesma macro. Utilizando macro de evento. de modo que a tabela importada via Fatura. Passe o cursor sobre o nome da variável e observe o registro do número da última linha. 3. H.txt seja recortada e colada na Plan2 da própria pasta que contém a macro.

2. idem. Editar a macro gerada pelo gravador. de modo a copiar e colar em uma única linha de comando. copie a célula A2 de Plan2 de Arq1 para a célula A2 de Plan2 de Arq2. para Arq2. 3. Abrir uma pasta vazia. Programando em Excel com VBA 47 . Gravar uma macro que localize. Após a gravação. Digitar a palavra “inicial” em algumas células aleatórias da planilha. H. Aplicando o comando Cells 1. 2. eliminado todos os argumentos do método Find e do método FindNext. salve e feche Arq1. Escrever uma macro que localize essa palavra e registre sua localização. 3. Pesquisando o uso do comando Cells Aproveite as macros geradas no exercício com Localizar e Substituir. Arq2 e Arq3) no diretório C. Criar 3 novos arquivos (Arq1. crie uma variável para registrar o número da linha. e outra para o número da coluna. Fechar Arq1 e Arq2. Opcionalmente. uma a uma na planilha.UERJ / FEN / DEIN C. Observar o comando Cells. use a MsgBox para informar ao usuário os números de linha e coluna. usando o método Cut Trabalhando com Localizar e Substituir no ambiente VBA Localizar: 1. Executar a macro editada e observar seu funcionamento. 2. Substituir: 1. Editar a macro gerada pelo gravador. Use a sequência Editar / Substituir. exceto os argumentos “What” e “Replacement”. Digitar em uma célula a palavra “inicial”. Abrir uma pasta vazia. Observe o arquivo Ajuda que se abre e clique no link Exemplos. Rocha Lista 4 de Exercícios Transferindo dados entre pastas e planilhas 1. Borges. cada célula que contiver a palavra “inicial”. 5. exceto os argumentos “What” e “After”. usando o método Copy e o argumento Destination. Gravar uma macro que substitua a palavra “inicial” por “inicio”. 4. Após a gravação. 3. Avalie os exemplos apresentados para o comando Cells. Edite a macro gravada. eliminado todos os argumentos do método Replace. observar os comandos gerados pela macro gravada ( ir ao ambiente VBA). Use a sequência Editar / Localizar. Executar a macro editada e observar seu funcionamento. observar os comandos gerados pela macro gravada ( ir ao ambiente VBA) 3. 2. Coloque o cursor na palavra Cells e tecle F1. Repita o exercício anterior. 4. Gravar uma macro em Arq3 que: abra Arq1 e Arq2. Para tal.

00 R$ 13.700. H.. tem-se a palavra “final”.950. Esta tabela pode. Uma planilha contém uma única tabela de dados. Para varrer as células da planilha. conforme abaixo. Crie uma macro que localize qualquer célula da tabela e que armazene a tabela em uma variável-objeto de mesmo nome. .700. Para tal.00 R$ 14.500.: 1.00 R$ 22.100. Uso de For each. registrando o resultado conforme figura..UERJ / FEN / DEIN C. ou pode simplesmente ter sua cor de fundo modificada para maior destaque.950.CurrentRegion Exit For End If 3.500. Borges...00 inicial R$ 15.900..00 ? Pede-se elaborar uma macro que localize a Range delimitada por estas palavras e registre esta Range em uma variável-objeto.900.. Para testar se uma célula está preenchida.. Quando for encontrada uma célula vazia. utilizamos Exit For...End If.00 R$ 14.Next. Obs. em uma localização indefinida. If celula.00 R$ 14. Vide abaixo.100.. utilize a estrutura For Each.00 final R$ 13. Um pouco abaixo. conforme abaixo.. tem em alguma célula da coluna imediatamente à esquerda a palavra “inicial”... Rocha Usando o método Find Uma coluna de dados. deve-se sair da estrutura For Each. por exemplo.00 Média: R$ 13..500. Programando em Excel com VBA 48 . ser copiada e colada em outra planilha. Uso de CurrentRegion.Next.Next. R$ 15. utilize a estrutura If.... Next celula 2. e deve calcular a sua média.Value <> "" Then Set Tabela = celula. A macro deve também destacar a Range. Localiza tabela de dados. de tamanho indefinido.00 R$ 14. alterando sua cor de fundo.00 R$ 22.. For Each celula In Cells .

A função terá dois argumentos: a Range com os dados e a Range de uma célula qualquer. Vide abaixo. utilize o gravador de macro para absorver os comandos associados à definição de cor de fundo.0 9. ? (%) Crie uma função “rateio” que calcule o percentual de responsabilidade de um dado centro de custo. Centro de Custos Despesas Indiretas (R$) Almoxarifado R$ 10.000 Yucatan 25 1-fev 8. Rocha Lista 5 de Exercícios Criando uma funcao Função rateio. Função mediaponderada.0 região amarela ? região região branca vermelha ? ? Obs.000 Hammerklavier Programando em Excel com VBA Prazo médio: ? dias 49 .500 Laboratório R$ 12. Crie uma função que totalize os valores associados a uma dada cor. com os respectivos prazos de recebimento.000 Rover 35 2-fev 5. vá ao VBE e estude as linhas de código. vide abaixo.0 2. A função deverá ter dois argumentos a serem definidos pelo usuário: a Range contendo a lista de despesas indiretas e a Range contendo a despesa indireta do centro de custo.450 Montagem R$ 14.000 Expedição R$ 5. Depois.000 Annie Frank 15 50 4-fev 16.0 5.0 7.000 Raimundos 35 3-fev 7.000 Palermo 40 2-fev 9. definida pelo usuário. Data Venda (R$) Cliente Prazo (dias) 1-fev 10. Borges.0 1.500 Kashmir 40 2-fev 12.0 4. Por exemplo. Ind. grave uma macro enquanto modifica a cor de fundo de uma célula qualquer.0 3. 4. Função sumbycolor. H.0 6.3 5. contendo a cor definida pelo usuário.600 Manutenção R$ 21. Uma tabela registra em uma coluna os centros de custo de uma pequena empresa e na coluna vizinha o rateio das despesas indiretas da empresa pelos centros de custo. vide abaixo. Uma tabela possui um conjunto de dados em células com diferentes cores de fundo.: antes de criar a função. Uma tabela registra os dados de vendas de uma empresa.UERJ / FEN / DEIN C.500 % das Desp.

. As linhas das duas Ranges podem crescer desde o valor 1 até o total de linhas. Podemos usar a estrutura For…Next para controlar este salto de linha para linha. mensais. vide abaixo. É o instante em que o somatório dos fluxos de caixa deixa de ser negativo. Esta MsgBox devera ter os botões Sim e Não. Rocha Crie uma função que calcule o prazo médio de recebimento das vendas. se o usuário retornar False (botão Cancelar). Usando a estrutura For each. Borges.Next. Na macro anterior.. Programando em Excel com VBA 50 . p. uma MsgBox devera perguntar se ele quer omitir sua idade. Criar uma macro que por meio de InputBox pergunte ao usuário sua idade (não necessariamente sob a forma de numero) e que armazene a resposta numa variável chamada idade.Count (Aqui temos que totalizar os produtos) Next linha Função Payback. Se ele clicar Não. O total de vendas (podemos chamar de Soma_dos_Valores) será simplesmente a aplicação da função de planilha SUM sobre a Range Valores. Lista 6 de Exercícios Usando Caixa de Mensagem e Caixa de Entrada 1. e os demais são positivos. Observações: 1. Se ele clicar Sim.Rows. que podemos nomear. H.. .. 2.: Payback é o prazo para que o investimento seja recuperado. 3. O primeiro fluxo de caixa tem sinal negativo. Esta variável deve ter dimensão string. Fluxos de caixa: (1. por ser o de investimento.UERJ / FEN / DEIN C. Assim: For linha = 1 To valores. e assim por diante. por "valor_vezes_peso". de qualquer uma das Ranges.etc. a macro e concluída. Obs.Sum(valores).WorksheetFunction.000) 240 240 240 240 240 240 Crie uma função que calcule o Payback do investimento.. A função só precisará que o usuário selecione duas Ranges: a de Valores (ou Vendas) e a de Pesos (ou Prazos). Uma tabela contém as projeções de fluxo de caixa de um investimento. Assim: soma_valores = Application. E os produtos devem ser totalizados em uma variável. em bases anuais. 2. Para o produto de cada Valor por seu Peso precisamos fazer com que a linha 1 da Range Valores seja multiplicada pela linha 1 da Range Pesos. a macro retorna ao InputBox. ex.

s93.513500.0.s43. A primeira linha apresenta os títulos das colunas.s82.s93.988900.NumFatura. você recebe um arquivo texto do sistema da empresa mostrando todas as faturas produzidas no dia anterior.673800.0.747600. você importa manualmente este arquivo para o Excel.s45.0.123808.111500.444162 5/6/2004.c4844. coloca seus títulos em negrito e imprime o relatório para ser distribuído para alguns gerentes. Excel”& Syrstad).123810. Programando em Excel com VBA 51 .s17.c7780.NumCliente.s32. Adiciona uma linha de totais aos dados.c7874.CustoPr oduto 5/6/2004.c5214.0.123804.457577 5/6/2004.233842 5/6/2004.62956 5/6/2004.0.355305 5/6/2004.c7969. Borges.435587 5/6/2004.0.123802.NumRepVendas.346164 5/6/2004.12000.97937 Copie estes dados para um arquivo do programa “Bloco de notas” e salve com o nome Fatura.c4940. Campus Vamos supor que você esteja trabalhando em um departamento de contabilidade. Todos os dias.760600. Ao chegar ao trabalho pela manhã. Ed.c3238.c8754.123811.123807.964600.s87. Esse arquivo texto tem seus campos separados por vírgulas. Os dados de 5 de junho tem 12 faturas. conforme abaixo.857400.123812. DataFatura.15000.316200.45000.0.s54.123805.123809.txt.200700.s82.s43.161877 5/6/2004.s43.325438 5/6/2004.c7492.UERJ / FEN / DEIN C.639600.0.c1620.c8468.894100.0.c3717.410493 5/6/2004. Rocha Importando dados e limpando o código gravado Importando Dados de Fatura .123801.123806.ReceitaProduto.123803.Exercício Fonte: Macros eVBA para Microsoft Excel (“Mr.ReceitaServiço.587630 5/6/2004. H.

selecionar Geral na seção Formato dos dados da coluna e alterá-lo para Data:DMA 11. Gravar nova macro. No menu. Rocha Preparando para gravar a macro: A importação do arquivo e a formatação da tabela são tarefas perfeitas para uma macro. modifique o nome da macro para ImportarFaturas. Clicar em Avançar 8. Macro. Verifique se as macros serão armazenadas em Esta Pasta de Trabalho. Clicar em Avançar 10. Pressionar Ctrl+T para selecionar todas as células Programando em Excel com VBA 52 . Clicar no botão AutoSoma e pressionar Ctrl+Enter para adicionar um total na coluna ReceitaProduto enquanto permanece nessa célula 17. Abra uma pasta de trabalho em branco e salve-a com o nome MacroParaImportarFaturas. Pressionar a tecla seta para direita quatro vezes para mover para a coluna E da linha de totais 16. desmarcar a tecla Tab e marcar Vírgula na seção Delimitadores 9. Selecionar Fatura. Digitar a palavra Totais 15. No Assistente de importação de texto – Etapa 2 de 3. Borges. Clicar na alça de autopreenchimento e arrastar da coluna E até a coluna G para copiar a fórmula de totais para as colunas F e G 18. H. Abrir 2. No Assistente de importação de texto – Etapa 1 de 3. Realçar a linha Total (ou usar Shift + Barra de espaço) e clicar no ícone Negrito para definir os totais em negrito 19. selecionar Arquivo. Pressionar a tecla End seguida da seta para baixo (End+Down) para mover o cursor para a última linha de dados 13. Escolher Todos os arquivos (*. Na caixa de diálogo Gravar macro. No Assistente de importação de texto – Etapa 3 de 3. Clicar em Abrir 6. selecionar Delimitado na seção Tipo de dados originais 7.UERJ / FEN / DEIN C. 1. Clicar em Concluir para importar o arquivo 12. Pressionar a seta para baixo mais uma vez para mover para a linha de totais 14.*) na lista suspensa Arquivos do tipo: 4. Clique em OK e siga as etapas abaixo.xls. Digite a letra i no campo Tecla de atalho.txt 5. Clique no botão Gravar macro ou selecione Ferramentas. Realçar a linha 1 e clicar no ícone Negrito para definir os títulos em negrito 20. Navegar até a pasta apropriada 3.

582700.UERJ / FEN / DEIN C.123814. Excel. tendo selecionada a macro ImportarFaturas. .Font.. AutoAjuste da seleção 22. o arquivo Fatura.End(xlUp). Depois. Essa combinação de teclas o leva à última linha com dados no intervalo atual. Cinco dicas para limpar o código gravado (Mr. Macros e clicando Executar..0.. apresentadas abaixo..s07.c7570.Font. Percorra o intervalo de baixo para cima para encontrar a última linha Não podemos garantir que todas células da planilha estarão preenchidas. habitue-se a usar este código para encontrar pelo VBA do Excel a última linha: Range(“A65536”).750000.. Macro. No menu.Count.c4913. Siga os passos logo abaixo recomendados pelo Mr. ou . observe as linhas de código da macro no Editor do Visual Basic.c7181. Executar a macro em outro dia produz resultados indesejados: No dia seguinte. Macro.340000 6/6/2004. Como o Excel tem 65.s55. Parar gravação. Excel) 1.37900. Simplifique-o.536 linhas.. 6/6/2004.s43.Select Selection. Execute a macro. Clicar no botão Parar gravação ou selecionar Ferramentas.123813. Coluna. 1). não necessariamente à última preenchida.Select Cells(Cells.123815. Rocha 21.Select Programando em Excel com VBA 53 . clicando Ctrl+i ou selecionando Ferramentas.0.19811 6/6/2004.0. A melhor solução é começar na parte inferior da planilha do Excel e pressionar End +Up.292000 Execute a macro ImportarFaturas novamente e avalie os resultados. Corrigindo e limpando o código: Corrija os possíveis erros presentes no código. H.End(xlUp).txt tem novas linhas adicionais. Isso é um problema quando usamos End + Down. Não selecione nada O código do gravador de macro antes de ser aperfeiçoado: Rows(“1:1”). eliminando o que for desnecessário.Bold = True Após a melhoria: Rows(“1:1”)..Bold = True 2. Borges. selecionar Formatar.Rows.

Select Selection. Use variáveis O gravador de macros nunca grava uma variável. Elas são muito fáceis de usar. colocar a palavra Total na próxima linha fica.Select ActiveSheet.End(xlUp).Count. FinalRow = Cells(Cells.End(xlUp).ColorIndex = 5 End With Programando em Excel com VBA 54 .ColorIndex = 5 Código melhorado: With Range(“A14:F14”). Ou ….UERJ / FEN / DEIN C.Bold = True Selection.Select Selection. 1).Copy Range(“F14”).Font.Size = 12 Selection.Paste Código melhorado: Range(“E14”).Font .. Aprenda a copiar e colar em uma única instrução O código gravado: Range(“E14”). End with se estiver executando múltiplas ações para a mesma célula ou intervalo de células O código gravado: Range(“A14:F14”).Row ….Row Assim.Value = “Total” 4. Rocha 3. Range(“A” & FinalRow + 1)..Font. Use With. defina a variável FinalRow como a última linha de dados: FinalRow = Range (“A65536”)..Rows. Por exemplo.Font. H.Bold = True .Size = 12 .Copy Destination:=Range(“F14”) 5.. Borges.

Você tem que criar uma rotina para importar o arquivo Fluxo. Pessoal. Periodicamente você receberá um arquivo Fluxo. Além disso.UERJ / FEN / DEIN C. Impostos (Imp). Pessoal 8. dia útil do mês subsequente. Os juros Programando em Excel com VBA 55 2. vêm as linhas com os seguintes dados tabulados: Data.345. Amortização (Amort). Logo abaixo. Sua devolução ao banco e o pagamento de juros ocorrem no 5o. A partir do próximo ano. Saldo do dia * . H. tem uma linha de rótulos de colunas. Receita 6. Receita (Rec). Saldo final * * Colunas não trazidas do arquivo Fluxo. Borges. Saldo inicial * 5. Impostos 9. Esses dados devem ser reorganizados na planilha com as seguintes colunas ordenadas: 1.000 e com duas casas decimais. A linha de cabeçalho deve ser formatada em negrito.txt tem na primeira linha a sigla que caracteriza o mês de projeção.00 O saldo final do dia é igual ao saldo inicial mais o saldo do dia. A fonte é Arial 10. Despesas Bancárias (Banc). Dia 4. conforme dados no arquivo txt O saldo inicial do dia corresponde ao saldo final do dia anterior O saldo inicial do dia primeiro de janeiro é de R$ 12. Outras Despesas (Outras). A empresa tem linha de crédito de empréstimos bancários de curto prazo para cobrir necessidades de caixa. Este arquivo possui 12 planilhas nomeadas segundo as siglas dos 12 meses do ano. com fonte tamanho 11. Empréstimos 12.txt As células contendo fluxos de caixa devem ser formatadas em R$ com ponto separador em 1. dia útil do mês.txt que conterá as projeções do mês dos fluxos de caixa diários. Fornecedores (Fornec).txt e destiná-lo à respectiva planilha. Empréstimos (Empr). Outras despesas 10. O arquivo Fluxo. as projeções de caixa da empresa serão transferidas para uma pasta denominada Fluxo de Caixa. Amortização 13. Juros 3. O saldo do dia é a soma das entradas de caixa (receita e empréstimos) menos a soma das saídas (todas as despesas e as amortizações de empréstimos). Rocha Exercício final: Fluxo de caixa em macro Você trabalha no Departamento Financeiro de uma pequena empresa. Fornecedores 7. A página deve ter orientação paisagem. Juros.xls. Despesas bancárias 11. Os empréstimos são depositados no 5o. Sabe-se que: Os fluxos são lançados somente para dias úteis.

Empréstimo Até R$ 2.000 a R$ 10. Planejar os passos necessários à construção da rotina 3. Criar e testar a rotina Programando em Excel com VBA 56 . Rocha calculados em um mês devem ser armazenados para lançamento posterior como despesa no mês subsequente. se for negativa. Pede-se: 1. Criar a pasta Fluxo de Caixa. Para que a planilha simule o empréstimo.xls com as 12 planilhas nomeadas 2. A taxa de juros é função do volume a ser captado perante o banco.000 De R$ 5.000 De R$ 2.UERJ / FEN / DEIN C.000 a R$ 5. igualando-o à diferença entre o saldo mínimo projetado do mês e o saldo mínimo desejado. o usuário deve antes ser informado da taxa de juros e concordar com seu valor. Borges. H.000 De R$ 15.000 De R$ 10. Caso contrário. O saldo mínimo desejado deve ser obtido do usuário por meio de InputBox. a planilha conclui seu trabalho sem lançamento do empréstimo.000 Taxa de juros 3% am 4% am 5% am 6% am 7% am A planilha deve calcular o empréstimo necessário.000 a R$ 15.000 a 30. conforme tabela abaixo.

Address O nome da célula ativa → Print ActiveCell. Pontos de interrupção Clicar na área da margem cinza à esquerda da linha de código que deseja interromper → linha realçada em marrom Executar a macro (F5) → o programa pára antes do ponto de interrupção → a linha do ponto de interrupção fica realçada em amarelo. Executar a partir daí. clicar na linha que deseja pular e selecionar Depurar/Definir próxima instrução Não parar em cada linha de código Para não parar em cada linha de código. parar a execução do código selecionando Redefinir (barra de ferramentas de macro) ou Executar/Redefinir. em etapas.Name (Obs.: Não tem ponto após Print) O valor da célula ativa → Print ActiveCell.. H..Value Programando em Excel com VBA 57 . Rocha Depuração no VBA Depuração total F8 executa cada linha do código Alt + Tab muda para o Excel Alt + Tab volta para o Editor Visual Basic Identificado o problema na macro. ou fechar o arquivo sem salvar.. se quiser. Borges. teclando F8. para qualquer lugar que queira executar em seguida . Retornar ao Excel e desfazer o que a macro fez. ou.UERJ / FEN / DEIN C. uma opção é selecionar Depurar/Executar até o cursor Usando a janela Verificação imediata Ctrl + G exibe a janela de Verificação imediata Pesquisas possíveis: A célula selecionada no momento → Print Selection. Após depuração. remover os pontos de interrupção clicando no ponto marrom escuro da margem ou selecionando Depurar/Limpar todos os pontos de interrupção Movendo para frente e para trás Usar o mouse para arrastar a linha amarela para cima ou para baixo.

Borges.Address A fórmula da célula ativa → Print ActiveCell. Rocha O endereço da célula ativa → Print ActiveCell. Os resultados das consultas anteriores vão sendo jogados para baixo. Esperar um segundo.UERJ / FEN / DEIN C. H. Caminho: Depurar/Adicionar inspeção de variáveis → surge a caixa de diálogo → expressão a digitar Resultado: janela Inspeções de variáveis no canto inferior Pressionando F8 o valor na janela vai sendo atualizado automaticamente Usando uma expressão para definir um ponto de interrupção Clicar com o botão direito no ícone dos óculos na janela “Inspeções de variáveis” → editar inspeção de variáveis inspeção de variáveis → selecionar “interromper quando o valor for alterado” Pressionar então F5 para executar o código.Formula Podemos executar o código linha-a-linha teclando F8 e acompanhando na janela de Verificação imediata. Consultando com o mouse Passar o mouse sobre uma expressão do código. Para repetir a mesma consulta coloque o cursor no final da linha da consulta anterior e tecle Enter. A macro pára somente quando algo importante (algo novo) acontece. Programando em Excel com VBA 58 . Uma dica de ferramenta aparece mostrando o valor atual da expressão → recurso valioso para loops Consultando com uma janela de inspeção de variáveis Substitui a consulta com o mouse ou a verificação imediata na pesquisa do valor de qualquer expressão enquanto percorre o código.

You're Reading a Free Preview

Descarregar
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->