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

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

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

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

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

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

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

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

de 4.483. tais como Range ou Sheet. Isto se faz por meio da declaração de variáveis.401298E-45 a 3. na linha a seguir exemplificamos uma declaração de variável: Programando em Excel com VBA 13 . mas pode ser alfanumérico.483. não pode haver espaços entre caracteres. Rocha Variáveis e constantes Variáveis De acordo com Cinto & Góes. de –2.768 a 32. de –32.767 Números inteiros.648 a 2. variável é um local nomeado da memória onde são guardados dados que podem ser modificados durante a execução do programa. constantes são itens nomeados que mantêm um valor constante por toda a execução de um programa.147. Por exemplo.647 Número real. não há distinção entre maiúsculo e minúsculo. Borges.147. utilizando-se a instrução Dim.UERJ / FEN / DEIN C. Por sua vez. 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. não podem ser usadas palavras já reservadas pelo VBA.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.402823E38 (positivo ou negativo) Date Double 8 8 Datas Número real. 1. H. não pode ter mais do que 255 caracteres.94065645841247E-324 a 1. As regras de nomeação de constantes e variáveis são: o nome deve começar com uma letra.

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

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

Private ou Static) para declarar uma variável de objeto. as declarações a seguir são válidas: ' Declara MyObject como o tipo de dados Variant. O exemplo abaixo declara uma variável de objeto e logo depois a atribui a um objeto.Range(“A1:C25”) TheRange. o seu tipo de dados será. H. (1) declare a variável de objeto e (2) atribua a variável de objeto a um objeto. Por exemplo. Dim MyObject As Range Observação Se você utilizar uma variável de objeto sem declará-la primeiro. Caso conheça o tipo de objeto específico. Variant. Por exemplo: Set MyObject= New Object ' Cria e atribui 16 Programando em Excel com VBA . Sub ObjTest() Dim theRange As Range Set theRange = ActiveSheet.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. código mais rápido e melhoria em legibilidade. 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. Dim MyObject As Object ' Declara MyObject como o tipo de dados Range. Utilize o tipo de dados Object para criar uma referência genérica a qualquer objeto. um Object ou um tipo específico de objeto. deve declarar a variável de objeto como pertencendo a esse tipo de objeto. 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. como padrão. Atribuindo uma variável de objeto a um objeto Utilize a instrução Set para atribuir um objeto a uma variável de objeto. Rocha Para criar uma variável de objeto.UERJ / FEN / DEIN C. Declarando uma variável de objeto Utilize a instrução Dim ou uma das outras instruções de declaração (Public. Uma variável que se refira a um objeto deve ser uma Variant. Borges.

podemos criar um novo módulo selecionando Inserir / Módulo. Caso não haja algum. Uma segunda diferença é que podemos criar macros utilizando o gravador de macros. 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. como p. ex.. Selecionado o módulo. <argumento2>. embora possamos criar macros mais refinadas no ambiente VBA. pelo número e tipo de argumentos recebidos. enquanto sub-rotinas não. Isto é. como p. Funções Funções são procedimentos delimitados pelas palavras-chave Function e End Function. A primeira diferença entre elas é que funções geralmente retornam valor. H. Sua declaração tem a seguinte estrutura: Function <nome da função> (<argumento ou parâmetro1>.) <nome da função> = <Valor ou expressão> End Function A função é identificada pelo nome. a função MsgBox.. e tem como objetivo executar um conjunto de instruções e produzir um valor final. Todas as funções utilizadas no Excel são desse tipo. 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. Borges. algumas funções não precisam de argumentos. Funções só podem ser criadas no ambiente VBA. Assim. Outras não retornam valor. as funções Rand() e Agora(). Entretanto. sempre que se pretender executar uma função é sabido a priori que ela produzirá um valor. Para criar uma função ou uma sub-rotina no ambiente VBA é necessário selecionar um módulo na Janela de código.UERJ / FEN / DEIN C. 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. ex. …) As <Tipo> Programando em Excel com VBA 17 .. 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. Podemos então refinar a definição de uma função: Function <Nome da Função> ( <parâmetro1> As <Tipo>.

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

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

Rocha Caixa de mensagem e caixa de entrada O VBA oferece ao usuário duas interfaces de comunicação com o programa ou macro. Exibe os botões Sim. o estilo de ícone a utilizar. é uma interface de saída que exibe apenas uma mensagem e aguarda que o usuário selecione um botão. Repetir e Ignorar. Quando o usuário seleciona um deles. A primeira. Exibe os botões Abortar. o nome do aplicativo será inserido na barra de título. 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. o valor padrão para buttons é 0. 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.UERJ / FEN / DEIN C. 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. Title (parâmetro opcional): Expressão de seqüência de caracteres exibida na barra de título da caixa de diálogo. a identidade do botão padrão e a modalidade da caixa de mensagem. InputBox pode ser tanto uma função quanto um método. Exibe os botões OK e Cancelar. A segunda. Borges. buttons. é uma interface de entrada de dados que exibe uma mensagem e aguarda uma resposta do usuário. Se omitido. Se você omitir title. Sintaxe resumida: MsgBox(prompt. Se prompt consistir em mais de uma linha. title) Prompt (parâmetro necessário): expressão exibida como mensagem na caixa de diálogo. a função retorna um integer que indica qual botão foi clicado. Enquanto MsgBox é uma função do VBA. você poderá separar as linhas utilizando um caractere de retorno de carro (Chr(13)). Função MsgBox A função MsgBox exibe uma mensagem (Prompt) em uma caixa de diálogo com um ou mais botões. Programando em Excel com VBA 20 . Não e Cancelar. InputBox. MsgBox. H. como veremos adiante.

H. Sub Msg_SalvarAlteracoes() Opcao = MsgBox(“Deseja salvar as alterações?”. O terceiro botão é o padrão.UERJ / FEN / DEIN C. 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. Os valores retornados pelo MsgBox são apresentados abaixo. com as opções Sim. “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 . Exibe o ícone Consulta de aviso. Não e Cancelar. 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. 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 informação. Rocha VbYesNo VbRetryCancel 4 5 Exibe os botões Sim e Não. Exibe os botões Repetir e Cancelar. O segundo botão é o padrão. Exibe o ícone Mensagem de aviso. 3+32+256.

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

Rocha O parâmetro ou argumento Type especifica o tipo de dados retornado. 2. Se este argumento for omitido. como um objeto Range Um valor de erro. Observe que Application. Comentários 1. H. Programando em Excel com VBA 23 . 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). Quando Type é 8. defina Type como 1 + 2. Worksheets("Plan1"). para uma caixa de entrada que possa aceitar tanto texto como números.Activate Set minhacelula = Application. 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. Borges. funcionando de modo idêntico à função InputBox. Tal endereço é armazenado na variável “minhacelula”. O exemplo abaixo pede ao usuário que selecione uma célula em Plan1. InputBox retorna um objeto Range. a caixa de diálogo retornará texto (string). Por exemplo.InputBox(prompt:="Selecione uma celula". O argumento Type pode ter um dos valores abaixo ou a soma deles. Você precisa usar a instrução Set para atribuir o resultado a um objeto Range (variável objeto).InputBox chama o método InputBox e InputBox sem qualificador de objeto chama a função InputBox. como #N/D Uma matriz de valores Você pode usar a soma dos valores permitidos para Type.UERJ / FEN / DEIN C.

Rocha Estruturas de controle Uma das vantagens de programarmos as macros é a maior habilidade em se automatizar tarefas. comunicando-lhe esse fato. 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. tendo o mesmo tipo de funcionamento da função SE do Excel. O VBA permite que as utilizemos para a construção de macros versáteis. Para isto é necessário ser capaz de se controlar o fluxo do programa. 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. Borges. 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 . H. No caso de ser omitida.UERJ / FEN / DEIN C. a avaliação negativa da condição implica uma saída automática da Instrução If. que não estão ao alcance do gravador de macros. As estruturas de controle são bastante comuns às diversas linguagens de programação. Estrutura If-Then-Else Esta é a estrutura de controle mais utilizada no Excel.

colocando uma instrução dentro da outra. 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. Sua forma geral é: If < condição > Then < declaração > ElseIf < condição > Then < declaração > ElseIf < condição > Then < declaração > .1) + 1) End Function As instruções If podem ser aninhadas. Rocha __________________________________ Public Function Sorteio() As Integer Sorteio = Int(Rnd() * (50 . Else < declaração > End If Programando em Excel com VBA 25 . Borges.UERJ / FEN / DEIN C. 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. H. a colocação de mais do que três instruções If aninhadas torna a macro bastante complicada.

UERJ / FEN / DEIN C. "Classificação Etária") If Idade < 3 Then MsgBox "É um bebê. H.".". . "Classificação Etária" ElseIf Idade <= 25 Then MsgBox "É um jovem. .". Borges.". "Classificação Etária" ElseIf Idade <= 17 Then MsgBox "É um adolescente. . "Classificação Etária" ElseIf Idade <= 65 Then MsgBox "É um adulto.". "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" End If End Sub Programando em Excel com VBA 26 .". 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" Else 'refere-se ao último ElseIf MsgBox "É um idoso.

". a estrutura Select Case é a melhor solução. "Classificação Etária") Select Case Idade Case Is < 3 MsgBox "É um bebê. 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. "Classificação Etária" Case Else 'caso residual MsgBox "É um idoso. Public Sub Classe_Etaria_2() Dim Idade As Integer Idade = InputBox("Introduza a idade: ".". "Classificação Etária" Case Is <= 12 MsgBox "É uma criança. "Classificação Etária" Case Is <= 25 MsgBox "É um jovem.".". . Veja abaixo. Borges.". . . . "Classificação Etária" End Select End Sub Programando em Excel com VBA 27 . . Rocha Estrutura Select Case Quando necessitamos que o VBA escolha entre várias diferentes opções. H. "Classificação Etária" Case Is <= 65 MsgBox "É um adulto.UERJ / FEN / DEIN C. "Classificação Etária" Case Is <= 17 MsgBox "É um adolescente. .".

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

Taxas() e Loteria(). Sua sintaxe é apresentada a seguir. Borges. 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. 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. onde um conjunto de instruções é executado enquanto uma condição determinada é atendida. Rocha Aplicação prática: Na macro abaixo o usuário é convidado a apostar num número entre 1 e 10. Do While < condição > < declaração > Loop Uma variação desta estrutura é apresentada abaixo. H.UERJ / FEN / DEIN C. Programando em Excel com VBA 29 . Do < declaração > Loop While < condição > Aplicação prática: utilize essa estrutura para reformatar as macros anteriores.

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

Borges.UERJ / FEN / DEIN C. 3 e 8 Colunas A. como inserir uma fórmula ou alterar o formato. Os tópicos seguintes mostram as maneiras mais comuns de identificar e trabalhar com objetos Range. O procedimento Sub abaixo altera o formato das células A1:D5 para negrito. Sub FormatRange() Workbooks("Pasta1"). H.8:8") Range("A:A. você pode fazer isso em uma instrução que identifique o intervalo e também altere uma propriedade ou aplique um método. 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. fazer algo com elas.Bold = True End Sub A tabela seguinte ilustra algumas referências em estilo A1 usando o método Range.G9:H16") Range("A:A") Range("1:1") Range("A:C") Range("1:5") Range("1:1.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. Referência Range("A1") Range("A1:B5") Range("C5:D9. Rocha Aprimorando objetos. Geralmente. C e F Programando em Excel com VBA 31 .Range("A1:D5") _ . Um objeto Range no Visual Basic pode ser uma única célula ou um intervalo de células.C:C.Font.Sheets("Plan1"). 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. em seguida.3:3.

Sub CycleThrough() Dim counter As Integer For counter = 1 To 20 Worksheets("Plan1"). No exemplo seguinte. Essas propriedades retornam um objeto Range representando um intervalo de células.Cells(counter. No exemplo seguinte. Referir-se a linhas e colunas Use a propriedade Rows ou a propriedade Columns para trabalhar com linhas ou colunas inteiras.1) retorna a célula A6 de Plan1.UERJ / FEN / DEIN C. Rows(1) retorna a linha um em Plan1. 3). H. Em seguida. a propriedade Bold do objeto Font do intervalo é definida como True. a propriedade Value é definida como 10. 1). Borges.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. Sub RowBold() Worksheets("Plan1"). 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.Bold = True End Sub A tabela seguinte ilustra algumas referências de linha e coluna usando as propriedades Rows e Columns. Cells(6.Rows(1). conforme mostrado no exemplo seguinte.Cells(6. Em seguida. Essa propriedade retorna um objeto Range representando uma única célula. Sub EnterValue() Worksheets("Sheet1").Font.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. use a propriedade Range. Programando em Excel com VBA 32 .

[A1:B5]. Sub ClearRange() Worksheets("Plan1").Value = 30 End Sub Programando em Excel com VBA 33 . Borges. crie uma variável de objeto e use o método Union. Rows(5)) myUnion.ClearContents End Sub __________________________________ Sub SetValue() [MyRange]. O exemplo seguinte altera para negrito o formato das linhas um. conforme mostrado nos exemplos seguintes. H. Rows(3).Font. Sub SeveralRows() Worksheets("Plan1").Activate Dim myUnion As Range Set myUnion = Union(Rows(1). 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. três e cinco na planilha um da pasta de trabalho ativa.UERJ / FEN / DEIN C. combinando várias chamadas à propriedade Rows ou Columns. Você não precisa digitar a palavra "Range" nem usar aspas.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.

UERJ / FEN / DEIN C.Goto Reference:="MyRange" Selection.Italic = True End Sub Para selecionar um intervalo nomeado. 3). em seguida.Underline = xlDouble End Sub Programando em Excel com VBA 34 . No exemplo seguinte. seleciona o intervalo.Goto Reference:="MyBook. em seguida. Sub FormatRange() Range("MyBook. digite um nome e. Borges. Sub ClearRange() Application.ClearContents End Sub O exemplo seguinte mostra como o mesmo procedimento seria escrito para a pasta de trabalho ativa. pressione ENTER. H.xls".xls!MyRange"). o qual ativa a pasta de trabalho e a planilha e. Para nomear um intervalo selecionado. 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.xls!MyRange" Selection. Sub Underline() ActiveCell. Referir-se a um intervalo nomeado O exemplo seguinte refere-se ao intervalo chamado "MyRange" na pasta de trabalho chamada "MyBook.Font. Rocha Referir-se a intervalos nomeados Os intervalos são mais fáceis de identificar por nome do que por notação A1. use o método GoTo. Sub ClearRange() Application.Font. clique na caixa de nome na extremidade esquerda da barra de fórmulas.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.Offset(1.

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

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

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

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

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

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

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

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

mas em termos de leitura dará uma maior percepção. que em termos operacionais não adicionará qualquer funcionalidade. 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. opcional. No exemplo a seguir. ela estará disponível para todos os procedimentos no projeto. Programando em Excel com VBA 43 . H. Contudo este comportamento fica mais explícito pela introdução da palavra-chave Public. a variável de seqüência de caracteres strMsg pode ser utilizada por qualquer procedimento em qualquer módulo do projeto. para que uma rotina tenha o âmbito do módulo onde está definida. indica que a rotina é acessível somente a outros procedimentos no módulo em que é declarado. A palavra-chave Private. Assim." 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. 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. ele exibirá o conteúdo da variável de seqüência de caracteres strMsg em uma caixa de diálogo. Quando o segundo procedimento for chamado. deverá ser antecedida pela palavra-chave Private. Rocha No exemplo a seguir. Por padrão as rotinas são de âmbito do projeto. opcional. Borges. Private strMsg As String _______________________________________ Sub InitializePrivateVariable() strMsg = "Esta variável não pode ser utilizada fora deste módulo. Public Const conIdade As Integer = 34 Escopo ou domínio dos procedimentos (Sub-rotinas. ' Insere a seção Declarações do módulo. ' Adiciona a seguinte seção Declarações do módulo.

os procedimentos de Evento são de domínio privado. 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. H. Borges. Rocha Enquanto os procedimentos Função e Sub-rotina são públicos por padrão. Programando em Excel com VBA 44 .

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

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

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

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

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

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

A primeira linha apresenta os títulos das colunas.747600. Programando em Excel com VBA 51 .639600.Exercício Fonte: Macros eVBA para Microsoft Excel (“Mr.123810.0. Ed. você importa manualmente este arquivo para o Excel. Rocha Importando dados e limpando o código gravado Importando Dados de Fatura . Borges.c7492.NumRepVendas.123809.62956 5/6/2004.UERJ / FEN / DEIN C. conforme abaixo.857400.s82.s82.988900.111500.c7969.NumFatura.123808.12000. Excel”& Syrstad).15000. Adiciona uma linha de totais aos dados.s43.s17.435587 5/6/2004.457577 5/6/2004. Esse arquivo texto tem seus campos separados por vírgulas.355305 5/6/2004.410493 5/6/2004.txt.c3717.s93.NumCliente. Todos os dias.97937 Copie estes dados para um arquivo do programa “Bloco de notas” e salve com o nome Fatura. Ao chegar ao trabalho pela manhã.s43.0. Os dados de 5 de junho tem 12 faturas.ReceitaServiço.45000.0.s93.587630 5/6/2004.s45.ReceitaProduto.513500.CustoPr oduto 5/6/2004.0.123801.s87.123802. você recebe um arquivo texto do sistema da empresa mostrando todas as faturas produzidas no dia anterior.233842 5/6/2004.123811.s54.c4940.c5214.c7780.161877 5/6/2004.s32.894100. coloca seus títulos em negrito e imprime o relatório para ser distribuído para alguns gerentes.0.0.316200.444162 5/6/2004.760600.964600.0.s43.123805.123806.c8754.123803.0.673800.325438 5/6/2004.200700.c4844. Campus Vamos supor que você esteja trabalhando em um departamento de contabilidade.c7874.123812.0. DataFatura.123807. H.346164 5/6/2004.c3238.c8468.c1620.123804.

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

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

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

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

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

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. Retornar ao Excel e desfazer o que a macro fez. se quiser. Executar a partir daí. para qualquer lugar que queira executar em seguida . parar a execução do código selecionando Redefinir (barra de ferramentas de macro) ou Executar/Redefinir.. 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. 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.: Não tem ponto após Print) O valor da célula ativa → Print ActiveCell.Address O nome da célula ativa → Print ActiveCell. Após depuração.UERJ / FEN / DEIN C. teclando F8. 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.Name (Obs. em etapas. ou fechar o arquivo sem salvar. Borges. 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.. ou..Value Programando em Excel com VBA 57 . H.

Address A fórmula da célula ativa → Print ActiveCell. Programando em Excel com VBA 58 . Borges.Formula Podemos executar o código linha-a-linha teclando F8 e acompanhando na janela de Verificação imediata. H. Consultando com o mouse Passar o mouse sobre uma expressão do código. Rocha O endereço da célula ativa → Print ActiveCell.UERJ / FEN / DEIN C. Para repetir a mesma consulta coloque o cursor no final da linha da consulta anterior e tecle Enter. Os resultados das consultas anteriores vão sendo jogados para baixo. A macro pára somente quando algo importante (algo novo) acontece. Esperar um segundo. 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. 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.

Sign up to vote on this title
UsefulNot useful