Informática para Engenharia das Ciências Agrárias

Exercícios Práticos: VBA

Ano Lectivo de 1999/2000

Os exercícios que se seguem devem ser realizados utilizando o editor do Visual Basic integrado no Excel. Para tal, inicie o Excel e adicione a barra de ferramentas do Visual Basic (menu <Ver> seguido das opções <Barras de ferramentas> e <Visual Basic>). Para aceder ao editor do Visual Basic prima o respectivo botão da nova barra.

  1. Defina um procedimento de nome Épar que dado um argumento do tipo inteiro devolve True se o argumento for um inteiro par e False caso contrário.

  2. Defina um procedimento OuExclusivo que dados dois argumentos do tipo lógico calcula o ou-exclusivo lógico (sem utilizar o operador Xor). O ou-exclusivo lógico devolve False quando ambos os argumentos têm o mesmo valor lógico e True caso contrário.

  3. Defina um procedimento de nome MeuFactorial que dado um argumento do tipo inteiro calcula o seu factorial. O factorial de um número é definido da seguinte forma:

    fact 0 = 1

    fact n = n * fact (n-1) para n >= 1

  4. Defina um procedimento de nome MeuFibonacci que dado um argumento do tipo inteiro devolve o seu valor na série de Fibonacci. A sucessão de números de Fibonacci é definida da seguinte forma:

    fib 0 = 0

    fib 1 = 1

    fib n = fib (n-1) + fib (n-2) para n >= 2

  5. Defina um procedimento de nome Idade que dado um argumento do tipo data, representando a data de nascimento de um certo indivíduo, calcula a sua idade.

  6. Construa um formulário que calcule sobre o conjunto de células seleccionadas as funções Soma, Média, Máximo e Mínimo e que guarde o resultado obtido numa outra célula. O acesso ao formulário deve ser conseguido através do uso de um botão de comando. As alíneas que se seguem orientam o desenvolvimento do formulário pretendido. À medida que realiza as várias alíneas, experimente o seu resultado no formulário.

    1. No editor do Visual Basic crie um novo formulário de nome FormFunBas (menu <Inserir> seguido da opção <UserForm>) e adicione os controlos que se indicam para estruturar o aspecto do formulário segundo a figura abaixo.

      • Três rótulos com os textos (propriedade Caption) Função:, Resultado: e Guardar em:
      • Uma caixa de combinação de nome (propriedade Name) ComboBox1.
      • Uma caixa de texto de nome TextBox1 associada ao rótulo Resultado:.
      • Uma caixa de texto de nome TextBox2 associada ao rótulo Guardar em:.
      • Um botão de comando de nome CommandButton1 e com o texto OK.

    2. Mude para a janela do Excel e utilizando a caixa de ferramentas dos controlos da barra do Visual Basic, insira um botão de comando na primeira folha de nome CommandButtonFunBas e com o texto Funções Básicas. Em seguida, mude para o editor do Visual Basic, seleccione o módulo da primeira folha e introduza o seguinte código:

         Private Sub CommandButtonFunBas_Click()

            FormFunBas.Show

         End Sub

      No final desta operação ao premir o botão deverá ser apresentado o formulário.

    3. Para iniciar a caixa de combinação e limpar as caixas de texto do formulário, defina o evento Initialize como se segue:

         Option Explicit

         Private Sub UserForm_Initialize()

            ComboBox1.AddItem "Soma"

            ComboBox1.AddItem "Média"

            ComboBox1.AddItem "Máximo"

            ComboBox1.AddItem "Mínimo"

            TextBox1 = ""

            TextBox2 = ""

         End Sub

    4. Defina o evento Click do botão de comando como se segue:

         Private Sub CommandButton1_Click()

            Range(TextBox2) = TextBox1

            Unload Me

         End Sub

    5. Defina o evento Change da caixa de combinação como se segue. O evento Change ocorre sempre que o conteúdo da caixa de combinação muda.

         Private Sub ComboBox1_Change()

            Select Case ComboBox1.ListIndex

               Case 0

                  TextBox1 = CelSoma(Selection)

               Case 1

                  TextBox1 = CelMed(Selection)

               Case 2

                  TextBox1 = CelMax(Selection)

               Case 3

                  TextBox1 = CelMin(Selection)

            End Select

         End Sub

    6. Para concluir a funcionalidade do formulário é necessário definir os vários procedimentos referidos na alínea anterior. Segue-se o exemplo para o procedimento CelMax.

         Function CelMax(rng As Range) As Integer

            Dim celula As Range

            CelMax = rng.Cells(1, 1)

            For Each celula In rng

               If celula > CelMax Then CelMax = celula

            Next

         End Function

  7. Construa uma espécie de máquina de calcular que permita executar cálculos numéricos envolvendo as quatro operações básicas de cálculo. O acesso à máquina deve ser conseguido através do uso de um botão de comando. No final da sua utilização, o resultado obtido no visor da máquina deve ser copiado para a célula activa. As alíneas que se seguem orientam o desenvolvimento da máquina pretendida.

    1. No editor do Visual Basic crie um novo formulário de nome FormCalc para representar a máquina de calcular.

    2. Adicione os controlos que se indicam e estruture-os de modo a que o aspecto do formulário se assemelhe ao da figura abaixo.

      • O visor da máquina deve ser representado por uma caixa de texto de nome Visor.
      • Os 10 algarismos devem ser representados por botões de comando com o respectivo algarismo e de nomes Botão0 até Botão9.
      • Os sinais das operações envolvidas devem ser representados por botões de comando com o respectivo sinal e de nomes BotãoSomar, BotãoSubtrair, BotãoMultiplicar, BotãoDividir e BotãoIgual.
      • A acção de limpar o visor deve ser representado por um botão de comando com a letra C e de nome BotãoClear.
      • A confirmação ou cancelamento das operações realizadas devem ser representadas por botões de comando com os textos OK e Cancelar e os nomes BotãoOK e BotãoCancelar respectivamente.

    3. À semelhança do exercício anterior, crie um botão de comando que apresente o formulário.

    4. No editor do Visual Basic seleccione o módulo da calculadora e insira o seguinte código:

         Option Explicit

         Dim memoria As Double

         Dim sinal As String * 1

         Dim inicio As Boolean

      O código acima declara três variáveis para representar o conteúdo em memória (memoria), o último sinal que foi premido (sinal), e se já foi ou não inserido algum número (inicio).

    5. Para iniciar as variáveis atrás declaradas, utilize o evento Initialize do formulário. Este evento ocorre sempre que o formulário é iniciado.

         Private Sub UserForm_Initialize()

            memoria = 0

            sinal = ""

            inicio = True

            Visor = 0

         End Sub

    6. Defina os eventos Click dos botões BotãoClear, BotãoOK e BotãoCancelar como se segue:

         Private Sub BotãoClear_Click()

            memoria = 0

            sinal = ""

            inicio = True

            Visor = 0

         End Sub

         Private Sub BotãoOK_Click()

            ActiveCell = Visor

            Unload Me

         End Sub

         Private Sub BotãoCancelar_Click()

            Unload

         End Sub

      Execute o formulário da calculadora, prima os botões em causa, verifique o sucedido e tente compreender o código respectivo.

    7. Defina o evento Click dos botões numéricos como uma chamada ao procedimento Numero_Click com o algarismo do próprio botão como argumento. O exemplo que se segue apresenta o código para os botões 0 e 1. De modo análogo escreva o código para os restantes botões.

         Private Sub Botão0_Click()

            Numero_Click 0

         End Sub

         Private Sub Botão1_Click()

            Numero_Click 1

         End Sub

      Para que a acção de premir um botão numérico funcione, é ainda necessário definir o procedimento Numero_Click acima referido. Este procedimento deve actualizar o visor da máquina de calcular à medida que os algarismos vão sendo premidos.

         Private Sub Numero_Click(num As Integer)

            ...

         End Sub

    8. Defina o evento Click dos botões de operação como uma chamada ao procedimento Sinal_Click com o sinal do próprio botão como argumento. Segue-se um exemplo para o botão de somar.

         Private Sub BotãoSomar_Click()

            Sinal_Click "+"

         End Sub

      Por fim, defina o procedimento Sinal_Click. Este procedimento deve guardar o sinal premido e efectuar as operações pendentes (pense no que acontece numa vulgar máquina de calcular!).

         Private Sub Sinal_Click(s As String)

            ...

         End Sub


Última Actualização: 15 de Novembro de 1999