VBA – Caixa de Diálogo para Abrir arquivo (OpenFileDialog)

Função pouco comum, mas em sistemas em VBA tem se tornado cada vez mais trivial a necessidade de abrir ou referenciar um arquivo.

A função abaixo (OpenFileDialog) abre uma caixa de diálogo para seleção de um arquivo e retorna o caminho deste juntamente com o nome do arquivo:

Public Function OpenFileDialog() As String
    Dim Filter As String, Title As String
    Dim FilterIndex As Integer
    Dim Filename As Variant
    ' Define o filtro de procura dos arquivos
    Filter = "Arquivos Wave (*.wav),*.wav,"
    ' O filtro padrão é *.*
    FilterIndex = 3
    ' Define o Título (Caption) da Tela
    Title = "Selecione um arquivo"
    ' Define o disco de procura
    ChDrive ("C")
    ChDir ("C:\")
    With Application
        ' Abre a caixa de diálogo para seleção do arquivo com os parâmetros
        Filename = .GetOpenFilename(Filter, FilterIndex, Title)
        ' Reseta o Path
        ChDrive (Left(.DefaultFilePath, 1))
        ChDir (.DefaultFilePath)
    End With
    ' Abandona ao Cancelar
    If Filename = False Then
        MsgBox "Nenhum arquivo foi selecionado."
        Exit Function
    End If
    ' Retorna o caminho do arquivo
    OpenFileDialog = Filename
End Function

Mais detalhes:

  • Utiliza-se o método GetOpenFilename para chamar a caixa de diálogo
  • Define-se o filtro de seleção de arquivos para o tipo  “Wave Files (*.wav),*.wav,”, mas poderia ser qualquer outro (txt, xls, doc, etc)
  • Pode-se definir um drive padrão de busca do arquivo

Bom proveito!

Referências:

http://www.tek-tips.com

Excel VBA – Else If

O que é?

No VBA, a estrutra If … Then … Else pode ser estendida com o uso da Estrutura ElseIf. Ela permite que você construa um nível de teste lógico em vários níveis, permitindo estender seu teste além de uma única condição.

Esta estrutura de controle de fluxo tem a seguinte sintaxe:

1
2
3
4
5
6
7
If [condição 1] Then
     [código executado caso a condição 1 seja verdadeira]
ElseIf [condição 2] Then
      [código executado caso a condição 2 seja verdadeira e a condição 1 seja falsa]
Else
      [código executado caso nenhuma das condições anteriores seja verdadeira]
End If

Da mesma forma que no uso simples do If, a palavra-chave Else é opcional e permite que um conjunto alternativo de instruções seja executado caso a condição testada não seja satisfeita. End If encerra o bloco de código. A quantidade de instruções ElseIf … Then que podemos ter dentro de uma estrutura é em teoria ilimitada, sendo possível analisar quantas condições quisermos de forma desacoplada. Cada teste pode ser tratado de forma independente, não tendo vínculo direto um com o outro.

Exemplo

Neste exemplo, faremos uma implementação de uma função que faz uma comparação de dois números. Ela deve receber como parâmetro dois números reais x e y e devolver um dos seguintes valores no formato texto:

  • MAIOR , se x é maior que y;
  • MENOR se x e menor que y;
  • IGUAIS se x e y forem iguais;

Para implementar esta função, usaremos a estrutura If … Then em conjunto com a estrutura Else If … Then. Observe o código:

 Function Compara(x As Long, y As Long) As String
    'variável para armazenar o resultado
    Dim resultado As String
 
    If x > y Then
        resultado = "MAIOR"
     ElseIf x < y Then
        resultado = "MENOR"
    ElseIf x = y Then
        resultado = "IGUAIS"
    End If
 
    'retorna o resultado da função
    Compara = resultado
End Function

Para facilitar o entendimento, tome o valor de x como sendo a referência para o funcionamento da função. O primeiro teste feito no código é para analisar se é maior do que y. Se a condição não atendida, o código passa para o segundo este, que é verificar se x é menor que y. Se o segundo teste também não for atendido, o código passa para a terceira condição que é a verificação de igualdade dos números.

Quando uma das condições for atendida, o código será redirecionada para a instrução End If.

Observe a aplicação da função Compara:

ajkbsmpbw67f_14k4d4fbf7ajkbsmpbw67f_15gc5n39fd

Excel VBA – If … Then … Else

O que é?

No VBA, a estrutura If … Then … Else permite que determinadas instruções sejam executadas apenas caso uma condição definida pelo programador seja satisfeita. O bloco If deve ser encerrado com uma instrução End If.

Esta estrutura de controle de fluxo tem a seguinte sintaxe:

If [condição] Then
    [código executado caso a condição seja verdadeira]
Else
    [código executado caso a condição seja falsa]
End If

A palavra-chave Else é opcional e permite que um conjunto alternativo de instruções seja executado caso a condição testada não seja satisfeita. End If encerra o bloco de código.

Note que é possível inserir qualquer número desejado de instruções dentro desta estrutura. As instruções executadas caso a condição seja verdadeira são todas aquelas que estiverem antes do Else (ou do End If, caso o Else seja suprimido). Analogamente, se uma instrução Else for fornecida, todo o código entre ela e o End If será executado.

Exemplo

Neste exemplo, faremos uma implementação da função módulo. Ela deve receber como parâmetro um número real x e devolver um dos seguintes valores:

  • x, se x é positivo;
  • -x, se x é negativo (note que isto corresponde ao valor de x sem o sinal).

Para implementar esta função, usaremos a estrutura If … Then. Observe o código:

Function Absoluto(x As Long) As Long
    If x >= 0 Then
        Absoluto = x
    Else
        Absoluto = -x
    End If
End Function

No código acima, a condição testada pelo If é se o valor de x é positivo (x > 0). Caso esta expressão seja verdadeira, o primeiro bloco de código (Absoluto = x) será executado, e o segundo, ignorado; caso contrário, apenas o segundo bloco (Absoluto = -x) será executado.

Observe a aplicação da função Absoluto:

Screenshot 2016-01-24 17.30.49

Screenshot 2016-01-24 17.31.11

A função se comporta exatamente como a função ABS do Excel.

Baboseiras – A conexão está devagar? Mande por pombo-correio!

Essa vale para começar a semana. A notícia vem da galera do meioBit.

2[1]goodfeathers_thumb

Se você acha que um certo provedor de internet que presta serviço em boa parte do território nacional é o ápice da decadência em termos de velocidade de conexão, não se preocupe: tem sempre alguém pior. Na África do Sul, um provedor de internet perdeu para… um pombo correio!

Lamentando o estado em que se encontram as conexões na terra de Mark Shuttleworth, a empresa Unlimited IT fez o seguinte teste com os serviços do principal provedor do país: enquanto o pombo Winston se encarregava de levar um pendrive de 4GB de um escritório a outro da empresa, localizados em cidades distantes 80 km uma da outra, um computador na cidade-destino tentava baixar um arquivo em um computador da cidade-origem.

O pombo ganhou a corrida com larga vantagem, levando duas horas e oito minutos desde sua partida até que os dados chegassem ao computador destino; enquanto isso, apenas 4% (!) dos dados haviam sido baixados no computador da cidade-destino.

A Telekom, a Telefônica deles, se justifica dizendo que propuseram soluções para resolver o problema, mas que a Unlimited IT não acatou a nenhuma delas. Fico imaginando que grande diferença faria qualquer uma das soluções padrão normalmente apresentadas em situações do tipo, ainda mais numa conexão mixuruca dessas.

O desafio dá uma idéia geral de como anda a situação como um todo no país, mas os provedores prometem revanche. Se seu parâmetro de comparação é um pombo, então significa que a coisa está feia mesmo!

A prova foi relatada via redes sociais pelos sul-africanos, que muito provavelmente só conseguiram reportar os acontecimentos da maratona horas depois do ocorrido.