Você está na página 1de 17

VBA Visual Basic for Applications Introduo O ambiente de programao Basic utilizado neste tutorial a extenso especfica do VBA

BA integrada planilha eletrnica Excel da Microsoft. A utilizao do Excel como meio de implementao de algoritmos facilita sobremaneira o tratamento da interao do programa Basic com o seu usurio por tornar os procedimentos de entrada e sada de dados, uma parte bastante sensvel da programao de sistemas, uma tarefa bastante simples e a prova de falhas. O estudo do VBA est dividido basicamente em trs fases: anlise dos tipos de dados suportados pelo Basic, estudo das principais instrues a serem utilizadas na programao e dicas de formas de implementao de acordo com a utilizao das estruturas disponibilizadas pelo VBA. Integrando Cdigo VBA no Microsoft Excel O cdigo desenvolvido atravs do VBA para uma planilha eletrnica Excel torna-se parte integrante da planilha. Isto significa que ao salvar ou recuperar uma planilha incrementada com rotinas em Basic (funes ou macros), estas rotinas so armazenas junto com a planilha. So dois os tipos principais de cdigos desenvolvidos em Basic: as macros (definidas atravs das instrues Sub ... End Sub) e as funes (definidas atravs das instrues Function ... End Function). As macros so acionadas explicitamente atravs da incluso de um boto a ela associado de forma que sempre que se deseja acionar uma determinada macro basta pressionar-se este boto. As funes so utilizadas da mesma forma com que as funes disponveis no Excel (aparecem na lista de funes definidas pelo usurio) e so automaticamente acionadas sempre que a planilha tem o contedo de alguma de suas clulas alterado. Tipos de dados A tabela a seguir mostra os tipos de dados com suporte, incluindo tamanhos de armazenamento e intervalos. Tipo de dados Byte Boolean Integer Long (nmero longo) inteiro de 1,79769313486231E308 a -4,94065645841247E-324 para valores negativos; de 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos. de -922.337.203.685.477,5808 922.337.203.685.477,5807 a 1 Tamanho armazenamento 1 byte 2 bytes 2 bytes 4 bytes de Intervalo de 0 a 255 True ou False de -32.768 a 32.767 de -2.147.483.648 a 2.147.483.647

Double 8 bytes (vrgula flutuante de dupla preciso) Currency 8 bytes (nmero inteiro em Prof. Francisco Adell Pricas www.furb.br

escala) Date String Variant (com nmeros) Variant (com caracteres) 8 bytes 10 bytes comprimento 16 bytes 22 bytes comprimento De 1 de janeiro de 100 a 31 de dezembro de 9999 + De 0 a aproximadamente 2 bilhes Qualquer valor numrico at o intervalo de um Double + O mesmo intervalo de String

Observao: Matrizes de qualquer tipo de dados requerem 20 bytes de memria, mais 4 bytes para cada dimenso da matriz, mais o nmero de bytes ocupados pelos prprios dados. A memria ocupada pelos dados pode ser calculada multiplicando-se o nmero de elementos de dados pelo tamanho de cada elemento. Por exemplo, os dados em uma matriz de dimenso nica, que consiste em quatro elementos de dados Integer de 2 bytes cada, ocupam 8 bytes. Os 8 bytes exigidos para os dados, mais os 24 bytes fixos, fazem com que o requisito de memria total para a matriz seja de 32 bytes. Observao: Use a funo StrConv para converter um tipo de dados de seqncia para outro. Propriedades Propriedade Cells Use Cells(linha, coluna) onde linha o ndice da linha e coluna o ndice da coluna, para retornar uma nica clula. O exemplo seguinte define o valor da clula A1 como 24. Worksheets(1).Cells(1, 1).Value = 24 O exemplo seguinte define a frmula para a clula A2. ActiveSheet.Cells(2, 1).Formula = "=sum(B1:B5)" Embora voc tambm possa usar Range("A1") para retornar a clula A1, pode haver ocasies em que a propriedade Cells seja mais conveniente porque voc pode usar uma varivel para a linha ou coluna. O exemplo seguinte cria cabealhos de coluna e linha em sheet1. Observe que aps a planilha ser ativada, a propriedade Cells pode ser usada sem uma declarao explcita de planilha (ela retorna uma clula da planilha ativa). Sub SetUpTable() Worksheets("sheet1").Activate For theYear = 1 To 5 Cells(1, theYear + 1).Value = 2001 + theYear Next theYear For theQuarter = 1 To 4 Cells(theQuarter + 1, 1).Value = "Q" & theQuarter Next theQuarter End Sub Apesar de voc poder usar funes de cadeia de caracteres do Visual Basic para alterar as referncias de estilo A1, muito mais fcil (e uma prtica de programao muito melhor) usar a notao Cells(1, 1).

Prof. Francisco Adell Pricas www.furb.br

Propriedade Range Use Range(argumento), onde argumento nomeia o intervalo, para retornar um objeto Range representando uma nica clula ou um intervalo de clulas. O exemplo seguinte coloca o valor da clula A1 na clula A5. Range("A5").Value = Range("A1").Value O exemplo seguinte preenche o intervalo A1:H8 com nmeros randmicos definindo a frmula para cada clula do intervalo. Quando usada sem um qualificador de objeto (um objeto esquerda do ponto), a propriedade Range retorna um intervalo da planilha ativa. Se a planilha ativa no for uma planilha de trabalho, o mtodo falhar. Use o mtodo Activate para ativar uma planilha antes de usar a propriedade Range sem um qualificador de objeto explcito. Worksheets("sheet1").Activate Range("A1:H8").Formula = "=rand()" 'Range is on the active sheet Instrues Instruo Dim Declara variveis e aloca espao de armazenamento. Sintaxe Dim varname [As type] [,varname [As type]] . . . A sintaxe da instruo Dim possui as partes a seguir: Parte varname Type Descrio Obrigatria. Nome da varivel; segue as convenes de nomenclatura padro de variveis. Opcional. Tipo de dados da varivel; pode ser Byte, Boolean, Integer, Long, Currency, Double, Date, String (para seqncias de comprimento varivel), String * length (para seqncias de comprimento fixo), Variant, um tipo definido pelo usurio ou um tipo de objeto. Use uma clusula As type separada para cada varivel que voc declarar.

Comentrios As variveis declaradas com Dim no nvel de mdulo esto disponveis para todos os procedimentos dentro do mdulo. No nvel de procedimento, as variveis esto disponveis somente dentro do procedimento. Use a instruo Dim no nvel de mdulo ou procedimento para declarar o tipo de dados de uma varivel. Por exemplo, a instruo a seguir declara uma varivel como Integer. Dim NmeroDeEmpregados As Integer Quando as variveis so inicializadas, uma varivel numrica inicializada como 0, uma seqncia de comprimento varivel inicializada como uma seqncia de comprimento zero ("") e uma seqncia de comprimento fixo preenchida com zeros. As variveis Variant so inicializadas como Empty. Cada elemento de uma varivel de tipo definido pelo usurio inicializado como se fosse uma varivel independente.

Prof. Francisco Adell Pricas www.furb.br

Observao: Quando voc usa a instruo Dim em um procedimento, ela geralmente colocada no incio do procedimento. Instruo Do...Loop Repete um bloco de instrues enquanto uma condio True ou at que ela se torne True. Fluxograma

statement 1 statement 2 ...

V condition? F

Sintaxe Do [statements] [Exit Do] [statements] Loop Until condition] A sintaxe da instruo Do Loop possui as seguintes partes: Parte Condition Statements Descrio Opcional. Expresso numrica ou expresso de seqncia que seja True ou False. Se condition for Null, ela ser tratada como False. Uma ou mais instrues que so repetidas enquanto, ou at que, condition seja True.

Comentrios Qualquer nmero de instrues Exit Do pode ser posicionado em qualquer lugar em DoLoop como alternativa para sair de um DoLoop. Exit Do freqentemente usada aps a avaliao de alguma condio, por exemplo, IfThen, caso em que a instruo Exit Do transfere o controle para a instruo imediatamente aps o Loop. Quando usada dentro de instrues DoLoop aninhadas, Exit Do transfere o controle para o loop que est aninhado em um nvel acima do loop onde ocorre Exit Do. Instruo For...Next Repete um grupo de instrues um nmero especfico de vezes. Fluxograma

Prof. Francisco Adell Pricas www.furb.br

init. incr. condition? V statement 1 statement 2 ... F

Sintaxe For counter = start To end [Step step] [statements] [Exit For] [statements] Next [counter] A sintaxe da instruo ForNext possui as seguintes partes: Parte Counter Start End Step Statements Descrio Obrigatria. Varivel numrica usada como um contador de loops. A varivel no pode ser um Boolean ou um elemento da matriz. Obrigatria. Valor inicial de counter. Obrigatria. Valor final de counter. Opcional. A quantidade em que counter alterado sempre que passa pelo loop. Se step no for especificado, o padro ser um. Opcional. Uma ou mais instrues entre For e Next que so executadas conforme o nmero de vezes especificado.

Comentrios O argumento step pode ser positivo ou negativo. O valor do argumento step determina o processamento do loop como a seguir: Valor Positivo ou 0 Negativo O loop executado se counter <= end counter >= end

Depois que todas as instrues do loop foram executadas, step adicionado a counter. Neste ponto, as instrues do loop so executadas novamente (baseadas no mesmo teste que causou a execuo inicial do loop) ou o loop sai e a execuo continua com a instruo seguinte instruo Next. Dica: A alterao do valor de counter enquanto dentro de um loop pode dificultar a leitura e depurao do cdigo. Qualquer nmero de instrues Exit For pode ser posicionado em qualquer lugar do loop como meio alternativo de sair. Muitas vezes, Exit For usada depois da avaliao de alguma condio, por exemplo, If...Then, e transfere o controle para a instruo imediatamente seguinte a Next. Prof. Francisco Adell Pricas www.furb.br 5

Voc pode aninhar loops For...Next posicionando um dentro do outro. D um nome de varivel exclusivo como seu counter a cada loop. A construo a seguir correta: For I = 1 To 10 For J = 1 To 10 For K = 1 To 10 ... Next K Next J Next I Observao: Se voc omitir counter em uma instruo Next, a execuo continua como se counter estivesse includo. Se uma instruo Next for encontrada antes de sua instruo For correspondente, ocorrer um erro. Instruo Function Declara o nome, os argumentos e o cdigo que formam o corpo de um procedimento Function. Sintaxe Function [statements] [name [Exit [statements] [name = expression] End Function name [(arglist)] = Function] [As type] expression]

A sintaxe da instruo Function possui as partes a seguir: Parte Name Arglist Descrio Obrigatria. Nome de Function; segue as convenes de nomenclatura padro de variveis. Opcional. Lista de variveis que representam argumentos passados ao procedimento Function quando ele chamado. Variveis mltiplas so separadas por vrgulas. Opcional. O tipo de dados do valor retornado pelo procedimento Function; pode ser Byte, Boolean, Integer, Long, Currency, Double, Date, String, Variant ou qualquer tipo definido pelo usurio. Opcional. Qualquer grupo de instrues a serem executadas dentro do procedimento Function. Opcional. Valor retornado de Function.

Type

statements expression

Prof. Francisco Adell Pricas www.furb.br

O argumento arglist apresenta a sintaxe e as partes a seguir: varname [As type] Parte varname type Descrio Obrigatria. Nome da varivel que representa o argumento; segue as convenes de nomenclatura padro de variveis. Opcional. Tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, Currency, Double, Date, String (somente de comprimento varivel), Variant ou um tipo de objeto especfico.

Comentrios Os procedimentos Function podem ser recursivos; ou seja, eles podem chamar a si prprios para executar uma determinada tarefa. No entanto, a recurso pode levar ao estouro de pilha. Todo o cdigo executvel deve estar em procedimentos. Voc no pode definir um procedimento Function dentro de outro procedimento Function, Sub ou Property. A instruo Exit Function causa a sada imediata de um procedimento Function. A execuo do programa continua com a instruo seguinte quela que chamou o procedimento Function. Qualquer nmero de instrues Exit Function pode aparecer em qualquer lugar de um procedimento Function. Assim como um procedimento Sub, um procedimento Function um procedimento separado que pode aceitar argumentos, executar uma srie de instrues e alterar os valores de seus argumentos. No entanto, ao contrrio de um procedimento Sub, voc pode usar um procedimento Function direita de uma expresso da mesma forma que voc usa qualquer funo intrnseca, como Sqr, Cos ou Chr, quando voc deseja usar o valor retornado pela funo. Voc chama um procedimento Function usando o nome da funo, seguido pela lista de argumentos entre parnteses, em uma expresso. Consulte a instruo Call para obter informaes especficas sobre como chamar procedimentos Function. Para retornar um valor de uma funo, atribua o valor ao nome da funo. Qualquer quantidade dessas atribuies pode aparecer em qualquer lugar do procedimento. Se nenhum valor for atribudo a name, o procedimento retornar um valor padro: uma funo numrica retornar 0, uma funo de seqncia retornar uma seqncia de comprimento zero ("") e uma funo Variant retornar Empty. Uma funo que retorna uma referncia de objeto retornar Nothing se nenhuma referncia de objeto for atribuda a name (usando Set) dentro de Function. O exemplo a seguir mostra como atribuir um valor retornado a uma funo denominada BinarySearch. Neste caso, False atribudo ao nome para indicar que um certo valor no foi localizado. Function BinarySearch(. . .) As Boolean ... ' Valor no localizado. Retorna um valor False. If lower > upper Then BinarySearch = False Exit Function End If ... End Function Prof. Francisco Adell Pricas www.furb.br 7

As variveis usadas em procedimentos Function dividem-se em duas categorias: aquelas explicitamente declaradas dentro do procedimento e aquelas que no so declaradas dessa forma. As variveis que so explicitamente declaradas dentro de um procedimento (usando Dim ou equivalente) so sempre locais em relao ao procedimento. As variveis usadas, mas no explicitamente declaradas em um procedimento, tambm so locais, a menos que explicitamente declaradas em algum nvel superior fora do procedimento. O Visual Basic pode reorganizar expresses aritmticas para aumentar a eficincia interna. Evite usar um procedimento Function em uma expresso aritmtica quando a funo alterar o valor das variveis na mesma expresso. Instruo If...Then...Else Executa condicionalmente um grupo de instrues, dependendo do valor de uma expresso. Fluxograma

condition? F

V statement 1 statement 2 ...

F statement 1 statement 2 ...

condition?

V statement 1 statement 2 ...

Sintaxe If condition Then [statements] [Else elsestatements] Ou voc pode usar a sintaxe em forma de bloco: If condition Then [statements] [ElseIf condition-n Then [elseifstatements] ... [Else [elsestatements]] End If A instruo If...Then...Else possui as seguintes partes: Parte Condition Descrio Obrigatria. Um ou mais dos dois tipos de expresso a seguir: Uma expresso numrica ou expresso de seqncia que avalia como True ou False. Se condition for Null, ela ser tratada como False. Statements Opcional na forma de bloco; obrigatria na forma de uma linha que no possua clusula Else. Uma ou mais instrues separadas por doispontos; executadas se condition for True. Opcional. Igual a condition. Opcional. Uma ou mais instrues executadas se condition-n associada 8

Condition-n Elseifstatements

Prof. Francisco Adell Pricas www.furb.br

for True. Elsestatements Opcional. Uma ou mais instrues executadas se nenhuma expresso condition ou condition-n anterior for True.

Comentrios Voc pode usar a forma de uma linha (primeira sintaxe) para testes simples e curtos. Entretanto, a forma de bloco (segunda sintaxe) proporciona mais estrutura e flexibilidade do que a forma de uma linha e normalmente mais fcil de ler, manter e depurar. Para determinar se uma instruo ou no um bloco If, examine o que segue a palavra-chave Then. Se qualquer coisa exceto um comentrio aparecer depois de Then na mesma linha, a instruo ser tratada como instruo If de uma linha. A clusulas Else e ElseIf so opcionais. Voc pode ter quantas clusulas ElseIf desejar em um bloco If, mas nenhuma pode aparecer depois de uma clusula Else. As instrues do bloco If podem ser aninhadas, isto , contidas uma dentro da outra. Executando um bloco If (segunda sintaxe), condition testada. Se condition for True, as instrues seguintes a Then so executadas. Se condition for False, cada condio ElseIf (se houver) ser avaliada alternadamente. Quando uma condio True for localizada, as instrues imediatamente seguintes Then associada sero executadas. Se nenhuma das condies ElseIf for True (ou se no houver clusulas ElseIf), as instrues seguintes a Else sero executadas. Depois da execuo das instrues seguintes a Then ou Else, a execuo continua com a instruo seguinte a End If. Instruo Rem Usada para incluir comentrios explicativos em um programa. Sintaxe Rem comment Voc tambm pode usar a sintaxe a seguir: ' comment O argumento opcional comment o texto de qualquer comentrio que voc desejar incluir. necessrio um espao entre a palavra-chave Rem e o comentrio. Comentrios Voc pode usar um apstrofo (') em vez da palavra-chave Rem. Instruo Sub Declara o nome, os argumentos e o cdigo que formam o corpo de um procedimento Sub. Sintaxe Sub name [(arglist)] [statements] [Exit Sub] [statements] End Sub Prof. Francisco Adell Pricas www.furb.br 9

Prof. Francisco Adell Pricas www.furb.br

10

A sintaxe da instruo Sub possui as partes a seguir: Parte Name Arlist Descrio Obrigatria. Nome de Sub; segue as convenes de nomenclatura da varivel padro. Opcional. Lista de variveis representando os argumentos que so passados para o procedimento Sub quando ele chamado. Variveis mltiplas so separadas por vrgulas. Opcional. Qualquer grupo de instrues a serem executadas dentro do procedimento Sub.

Statements

O argumento arglist apresenta a sintaxe e as partes a seguir: varname [As type] Parte Varname Type Descrio Obrigatria. Nome da varivel que representa o argumento; segue as convenes de nomenclatura padro de variveis. Opcional. Tipo de dados do argumento passado ao procedimento; pode ser Byte, Boolean, Integer, Long, Currency, Double, Date, String (somente de comprimento varivel), Variant, ou um tipo de objeto especfico. Se o parmetro no for Optional, um tipo definido pelo usurio tambm pode ser especificado.

Comentrios Os procedimentos Sub podem ser recursivos; ou seja, eles podem chamar a si mesmos para efetuar uma determinada tarefa. No entanto, a recurso pode levar ao estouro de pilha. Todo o cdigo executvel deve estar em procedimentos. Voc no pode definir um procedimento Sub dentro de outro procedimento Sub, Function ou Property. As palavras-chave Exit Sub causam uma sada imediata de um procedimento Sub. A execuo do programa continua com a instruo que segue a instruo que chamou o procedimento Sub. possvel aparecer um nmero variado de instrues Exit Sub em qualquer lugar de um procedimento Sub. Como um procedimento Function, um procedimento Sub um procedimento separado que pode tomar os argumentos, efetuar uma srie de instrues e alterar o valor de seus argumentos. Contudo, ao contrrio do procedimento Function, que retorna um valor, um procedimento Sub no pode ser usado em uma expresso. Voc chama um procedimento Sub usando o nome do procedimento seguido pela lista de argumentos. Consulte a instruo Call para obter informaes especficas sobre como chamar os procedimentos Sub. As variveis usadas nos procedimentos Sub incorrem em duas categorias: aquelas explicitamente declaradas dentro do procedimento e aquelas que no so declaradas dessa forma. As variveis que so explicitamente declaradas dentro de um procedimento (usando Dim ou equivalente) so sempre locais em relao ao procedimento. As variveis usadas, mas no explicitamente declaradas em um procedimento, tambm so locais, a menos que explicitamente declaradas em algum nvel superior fora do procedimento.

Prof. Francisco Adell Pricas www.furb.br

11

Instruo While...Wend Executa uma srie de instrues desde que uma determinada condio seja True. Fluxograma

condition? F

V statement 1 statement 2 ...

Sintaxe While [statements] Wend A sintaxe da instruo While...Wend possui as seguintes partes: Parte condition statements Descrio Obrigatria. Expresso numrica ou expresso de seqncia que avalia como True ou False. Se condition for Null, ela ser tratada como False. Opcional. Uma ou mais instrues executadas enquanto a condio for True. condition

Comentrios Se condition for True, todas as statements sero executadas at que a instruo Wend seja encontrada. Ento o controle retorna para a instruo While e condition novamente verificada. Se condition ainda for True, o processo repetido. Se no for True, a execuo continua com a instruo seguinte instruo Wend. Os loops While...Wend podem ser aninhados a qualquer nvel. Cada Wend corresponde ao mais recente While. Dica: A instruo Do...Loop fornece um meio mais estruturado e flexvel para executar um loop. Programando em VBA Declarando constantes Atravs da declarao de uma constante, voc pode atribuir um nome significativo a um valor. Utilize a instruo Const para declarar uma constante e definir o seu valor. Depois que uma constante tiver sido declarada, no ser possvel modific-la ou atribuir-lhe um novo valor. Voc pode declarar uma constante dentro de um procedimento ou na parte superior de um mdulo, na seo Declaraes. Como padro, as constantes em nvel de mdulo so privadas. O exemplo a seguir declara a constante conIdade como um Integer e atribui a ela o valor 34. Prof. Francisco Adell Pricas www.furb.br 12

Const conAge As Integer = 34 As constantes podem ser declaradas como um destes tipos de dados: Boolean, Byte, Integer, Long, Currency, Double, Date, String ou Variant. Como voc j conhece o valor de uma constante, pode especificar o tipo de dados em uma instruo Const. Voc pode declarar diversas constantes em uma instruo. Para especificar um tipo de dados, voc deve incluir o tipo de dados de cada constante. Na instruo a seguir, as constantes conAge e conWage so declaradas como Integer. Const conAge As Integer = 34, conWage As Currency = 35.000 Declarando variveis Ao declarar variveis, voc geralmente utiliza uma instruo Dim. Uma instruo de declarao pode ser colocada dentro de um procedimento para criar uma varivel de nvel de procedimento. Ou ela pode ser colocada na parte superior de um mdulo, na seo Declaraes, para criar uma varivel de nvel de mdulo. O exemplo a seguir cria a varivel strName e especifica o tipo de dados String. Dim strName As String As variveis podem ser declaradas como um dos seguintes tipos de dados: Boolean, Byte, Integer, Long, Currency, Double, Date, String (para seqncias de caracteres de comprimento varivel), String * length (para seqncias de caracteres de comprimento fixo) ou Variant. Caso voc no especifique um tipo de dados, o tipo de dados Variant ser atribudo como padro. Voc tambm pode criar um tipo definido pelo usurio atravs da instruo Type. Para obter mais informaes sobre tipos de dados, consulte Resumo de tipos de dados na Ajuda do Visual Basic. Voc pode declarar diversas variveis em uma instruo. Para especificar um tipo de dados, voc deve incluir o tipo de dados para cada varivel. Na instruo a seguir, as variveis intX, intY e intZ so declaradas como tipo Integer. Dim intX As Integer, intY As Integer, intZ As Integer Na instruo a seguir, intX e intY so declaradas como tipo Variant; apenas intZ declarada como tipo Integer. Dim intX, intY, intZ As Integer Voc no precisa fornecer o tipo de dados da varivel na instruo de declarao. Caso voc omita o tipo de dados, a varivel ser do tipo Variant. Declarando matrizes As matrizes so declaradas da mesma maneira que as outras variveis, utilizando a instruo Dim. A diferena entre as variveis escalares (que no so matrizes) e variveis de matriz que geralmente voc deve especificar o tamanho da matriz. Uma matriz cujo tamanho especificado uma matriz de tamanho fixo. Uma matriz cujo tamanho pode ser alterado durante a execuo de um programa uma matriz dinmica. A indexao de uma matriz a partir de 0 ou 1 depende da definio da instruo Option Base. Se Option Base 1 no for especificada, todos os ndices de matriz iniciaro em zero. Prof. Francisco Adell Pricas www.furb.br 13

Na linha de cdigo a seguir, uma matriz de tamanho fixo declarada como uma matriz Integer com 11 linhas e 11 colunas: Dim MyArray (10, 10) As Integer O primeiro argumento representa as linhas; o segundo argumento representa as colunas. Como ocorre com qualquer outra declarao de varivel, a menos que voc especifique um tipo de dados para a matriz, o tipo de dados dos elementos em uma matriz declarada Variant. Cada elemento numrico Variant da matriz utiliza 16 bytes. Cada elemento Variant de seqncia de caracteres utiliza 22 bytes. Para criar cdigo o mais compacto possvel, declare explicitamente as suas matrizes como um tipo de dados diferente de Variant. As linhas de cdigo a seguir comparam o tamanho de diversas matrizes: ' Matriz Integer utiliza 22 bytes. Dim MyIntegerArray(10) As Integer ' Matriz de dupla preciso utiliza 88 bytes. Dim MyDoubleArray (10) As Double ' Matriz Variant utiliza pelo menos 176 bytes. Dim MyVariantArray (10) ' Matriz Integer utiliza 100 * 100 * 2 bytes. Dim MyIntegerArray (99, 99) As Integer ' Matriz de dupla preciso utiliza 100 * 100 * 8 bytes. Dim MyDoubleArray (99, 99) As Double ' Matriz Variant utiliza pelo menos 160.000 bytes. Dim MyVariantArray (99, 99) O tamanho mximo de uma matriz varia com base no seu sistema operacional e na quantidade de memria disponvel. Escrevendo um procedimento Function Um procedimento Function uma srie de instrues do Visual Basic colocadas entre as instrues Function e End Function. Um procedimento Function semelhante a um procedimento Sub, mas uma funo tambm pode retornar um valor. Um procedimento Function pode utilizar argumentos, como constantes, variveis ou expresses passadas para ele por um procedimento de chamada. Caso um procedimento Function no tenha argumentos, sua instruo Function deve incluir um conjunto de parnteses vazio. Uma funo retorna um valor atribuindo um valor ao seu nome em uma ou mais instrues do procedimento. No exemplo a seguir, a funo Celsius calcula o nmero de graus Celsius a partir dos graus Fahrenheit. Quando a funo for chamada a partir do procedimento Main, uma varivel que contm o valor do argumento ser passada para a funo. O resultado do clculo retornado para o procedimento de chamada e exibido em uma caixa de mensagem. Sub Main() temp = InputBox(Prompt:= _ "Digite a temperatura em graus F.", Type:=1) MsgBox "A temperatura " & Celsius(temp) & " graus C." End Sub Function Celsius(fDegrees) Prof. Francisco Adell Pricas www.furb.br 14

Celsius = (fDegrees - 32) * 5 / 9 End Function Escrevendo um procedimento Sub Um procedimento Sub uma srie de instrues do Visual Basic colocada entre as instrues Sub e End Sub que executam aes, mas no retornam um valor. Um procedimento Sub pode utilizar argumentos, como constantes, variveis ou expresses passadas por um procedimento de chamada. Caso um procedimento Sub no tenha argumentos, a instruo Sub deve incluir um conjunto de parnteses vazios. O procedimento Sub a seguir tem comentrios que explicam cada linha. ' Declara um procedimento nomeado GetInfo ' Este procedimento Sub no utiliza argumentos Sub GetInfo() ' Declara uma varivel de seqncia de caracteres nomeada answer Dim answer As String ' Atribui o valor de retorno da funo InputBox answer answer = InputBox(Prompt:="Qual o seu nome?") ' Instruo condicional If...Then...Else If answer = Empty Then MsgBox Prompt:="Voc no digitou um nome." Else MsgBox Prompt:="O seu nome " & answer ' Encerra a instruo If...Then...Else End If ' Encerra o procedimento Sub End Sub Escrevendo instrues de atribuio As instrues de atribuio atribuem um valor ou expresso a uma varivel ou constante. As instrues de atribuio sempre incluem um sinal de igualdade (=). O exemplo a seguir atribui o valor de retorno da funo InputBox varivel yourName. Sub Question() Dim yourName As String yourName = InputBox("Qual o seu nome?") MsgBox "Seu nome " & yourName End Sub Utilizando instrues For...Next Voc pode utilizar instrues For...Next para repetir um bloco de instrues um determinado nmero de vezes. Os loops For utilizam uma varivel de contador cujo valor aumentado ou diminudo a cada repetio do loop. O procedimento a seguir faz com que o computador emita 50 avisos sonoros. A instruo For especifica a varivel de contador x e seus valores inicial e final. A instruo Next incrementa a varivel de contador em uma unidade. Sub Beeps() For x = 1 To 50 Beep Next x End Sub Prof. Francisco Adell Pricas www.furb.br 15

Utilizando a palavra-chave Step, voc pode aumentar ou diminuir a varivel de contador pelo valor especificado. No exemplo a seguir, a varivel de contador j incrementada em 2 cada vez que o loop se repete. Quando o loop terminar, total ser a soma de 2, 4, 6, 8 e 10. Sub TwosTotal() For j = 2 To 10 Step 2 total = total + j Next j MsgBox "O total " & total End Sub Para diminuir a varivel de contador, utilize um valor Step negativo. Para diminuir a varivel de contador, voc deve especificar um valor final que seja inferior ao valor inicial. No exemplo a seguir, a varivel de contador meuNm reduzida em duas unidades cada vez que o loop se repete. Quando o loop terminar, total ser a soma de 16, 14, 12, 10, 8, 6, 4 e 2. Sub NewTotal() For myNum = 16 To 2 Step -2 total = total + myNum Next myNum MsgBox "O total " & total End Sub Observao: No preciso incluir o nome da varivel de contador depois da instruo Next. Nos exemplos apresentados acima, o nome da varivel foi includo para deix-los mais legveis. Voc pode sair de uma instruo For...Next antes que o contador atinja o seu valor final utilizando a instruo Exit for. Por exemplo, quando ocorrer um erro, utilize a instruo Exit For no bloco de instrues True de uma instruo If...Then...Else ou uma instruo Select Case que verifica especificamente o erro. Caso no ocorra o erro, a instruo IfThenElse ser False e a execuo do loop continuar conforme esperado. Utilizando instrues If...Then...Else Voc pode utilizar a instruo If...Then...Else para executar uma instruo especfica ou um bloco de instrues, dependendo do valor de uma condio. As instrues If...Then...Else podem ser aninhadas em tantos nveis quanto voc necessitar. Executando instrues caso uma condio seja True Para executar somente uma instruo quando uma condio for True, utilize a sintaxe de uma linha da instruo If...Then...Else. O exemplo a seguir mostra a sintaxe de uma linha, omitindo a palavra-chave Else: Sub FixDate() myDate = #2/13/95# If myDate < Now Then myDate = Now End Sub Para executar mais de uma linha de cdigo, voc deve utilizar a sintaxe de mltiplas linhas. Essa sintaxe inclui a instruo End If, como mostra o exemplo a seguir: Sub AlertUser(value as Long) If value = 0 Then AlertLabel.ForeColor = "Red" AlertLabel.Font.Bold = True Prof. Francisco Adell Pricas www.furb.br 16

AlertLabel.Font.Italic = True End If End Sub Executando determinadas instrues caso uma condio seja True e executando outras, caso ela seja False Utilize uma instruo If...Then...Else para definir dois blocos de instrues executveis: um bloco executado caso a condio seja True, o outro bloco executado caso a condio seja False. Sub AlertUser(value as Long) If value = 0 Then AlertLabel.ForeColor = vbRed AlertLabel.Font.Bold = True AlertLabel.Font.Italic = True Else AlertLabel.Forecolor = vbBlack AlertLabel.Font.Bold = False AlertLabel.Font.Italic = False End If End Sub Testando uma segunda condio caso a primeira condio seja False Voc pode adicionar instrues ElseIf a uma instruo If...Then...Else para testar uma segunda condio caso a primeira condio seja False. Por exemplo, o procedimento de funo a seguir computa um bnus com base no cargo. A instruo posterior a instruo Else executada caso as condies em todas as instrues If e ElseIf sejam False. Function Bonus(performance, salary) If performance = 1 Then Bonus = salary * 0.1 ElseIf performance = 2 Then Bonus = salary * 0.09 ElseIf performance = 3 Then Bonus = salary * 0.07 Else Bonus = 0 End If End Function

Prof. Francisco Adell Pricas www.furb.br

17

Você também pode gostar