Arquivo da tag: VBA

Automatizando Tarefas: Uma Comparação entre VBA e PowerShell

Quando se trata de automatizar tarefas, os desenvolvedores têm diferentes opções à disposição. Duas linguagens populares para automação são o VBA (Visual Basic for Applications) e o PowerShell. Embora tenham propósitos semelhantes, eles possuem abordagens e pontos fortes diferentes. Neste artigo, exploraremos as semelhanças e diferenças entre o VBA e o PowerShell, juntamente com exemplos de código em cada linguagem.

VBA: Automação dentro de Aplicativos

O VBA é amplamente utilizado em aplicativos como Excel, Word e Access para automatizar tarefas e estender a funcionalidade. Ele oferece um ambiente familiar para desenvolvedores que trabalham com aplicativos do Microsoft Office. Aqui está um exemplo de uso do VBA para copiar arquivos de uma pasta de origem para uma pasta de destino com base em um critério de pesquisa:

Sub CopiarArquivos()
    Dim caminhoOrigem As String
    Dim caminhoDestino As String
    Dim nomeArquivo As String
    Dim arquivo As Variant
    
    ' Define os caminhos de origem e destino
    caminhoOrigem = "C:\PastaOrigem"
    caminhoDestino = "C:\PastaDestino"
    
    ' Percorre os arquivos na pasta de origem
    nomeArquivo = Dir(caminhoOrigem & "\*.txt") ' Critério de pesquisa para arquivos .txt
    
    Do While nomeArquivo <> ""
        ' Copia cada arquivo para a pasta de destino
        FileCopy caminhoOrigem & "\" & nomeArquivo, caminhoDestino & "\" & nomeArquivo
        
        ' Obtém o próximo arquivo
        nomeArquivo = Dir()
    Loop
    
    ' Exibe uma mensagem quando concluído
    MsgBox "Arquivos copiados com sucesso!"
End Sub

Neste trecho de código VBA, especificamos os caminhos de origem e destino e usamos a função Dir para obter uma lista de arquivos na pasta de origem que correspondam ao critério de pesquisa especificado (neste caso, “*.txt” para arquivos de texto). Em seguida, percorremos cada arquivo e usamos a declaração FileCopy para copiá-lo para a pasta de destino.

PowerShell: Automação Poderosa em Linha de Comando

O PowerShell é uma linguagem de script em linha de comando desenvolvida pela Microsoft, focada em administração de sistemas e tarefas de automação. Ele oferece uma ampla gama de cmdlets e acesso ao .NET Framework para capacidades avançadas de automação. Aqui está um exemplo de uso do PowerShell para copiar arquivos de uma pasta de origem para uma pasta de destino com base em um critério de pesquisa:

$caminhoOrigem = "C:\PastaOrigem"
$caminhoDestino = "C:\PastaDestino"

# Obter os arquivos que correspondem ao critério de pesquisa
$arquivos = Get-ChildItem -Path $caminhoOrigem -Filter "*.txt" -Recurse

# Copiar os arquivos para a pasta de destino
foreach ($arquivo in $arquivos) {
    Copy-Item -Path $arquivo.FullName -Destination $caminhoDestino
}

# Exibir uma mensagem quando concluído
Write-Host "Arquivos copiados com sucesso!"

Neste trecho de código PowerShell, especificamos os caminhos de origem e destino e usamos o cmdlet Get-ChildItem para obter uma lista de arquivos na pasta de origem que correspondam ao critério de pesquisa especificado (neste caso, “*.txt” para arquivos de texto). Em seguida, percorremos cada arquivo usando o loop foreach e usamos o cmdlet Copy-Item para copiá-lo para a pasta de destino.

Comparando VBA e PowerShell

Agora vamos comparar o VBA e o PowerShell em termos de seus pontos fortes e áreas de foco:

  1. Integração com Aplicativos: O VBA se destaca na automação de tarefas dentro de aplicativos do Microsoft Office. Ele oferece acesso direto ao modelo de objetos do aplicativo hospedeiro, permitindo um controle e manipulação detalhados. O PowerShell, por outro lado, concentra-se mais na automação e administração de sistemas, com uma ampla variedade de cmdlets para gerenciar sistemas operacionais, serviços e recursos.
  2. Sintaxe e Estrutura: O VBA utiliza uma abordagem procedural, com sub-rotinas e funções, sendo adequado para tarefas específicas de aplicativos. O PowerShell adota uma abordagem baseada em comandos, usando cmdlets e funções para executar operações. Ele abraça uma mentalidade orientada a objetos, tratando tudo como um objeto com propriedades e métodos.
  3. Integração e Extensibilidade: O VBA integra-se perfeitamente a aplicativos do Microsoft Office e seus modelos de objetos. Ele oferece acesso fácil a funcionalidades específicas do aplicativo. O PowerShell, por outro lado, oferece integração extensiva com o .NET Framework e bibliotecas de terceiros. Ele suporta a importação de módulos e o aproveitamento de bibliotecas existentes para estender a funcionalidade.
  4. Administração de Sistemas: O PowerShell se destaca em tarefas de administração de sistemas. Ele fornece cmdlets poderosos para gerenciar sistemas operacionais, Active Directory, SQL Server, Exchange Server e muito mais. As capacidades de script do PowerShell e o acesso ao .NET Framework tornam-no uma escolha ideal para automatizar operações complexas de sistema e realizar tarefas administrativas.

Quando se trata de copiar arquivos com base em critérios de pesquisa, o PowerShell tem uma vantagem clara. O cmdlet Get-ChildItem fornece recursos robustos de filtragem de arquivos, permitindo pesquisar arquivos com base em vários critérios, como extensão de arquivo, nome, tamanho e outros. A sintaxe concisa do PowerShell e seu conjunto abrangente de cmdlets o tornam uma ferramenta poderosa para gerenciar e manipular arquivos de forma eficiente.

Em conclusão, tanto o VBA quanto o PowerShell são ferramentas valiosas para automação, mas possuem áreas de foco diferentes. O VBA é ideal para automatizar tarefas dentro de aplicativos do Microsoft Office, enquanto o PowerShell se destaca em administração de sistemas, automação em linha de comando e gerenciamento de arquivos. Escolha a linguagem que melhor atenda às suas necessidades de automação e aproveite seus pontos fortes para otimizar seus fluxos de trabalho e aumentar a produtividade.

Selenium – O que é Selenium Basic/VBA

Selenium é uma biblioteca poderosa e versátil de código aberto que oferece um conjunto abrangente de ferramentas para automação de navegadores web. Embora seja comumente usado para testes web, ele também ganhou grande popularidade no campo de web scraping. Aqui estão algumas razões pelas quais o Selenium é considerado uma excelente opção para web scraping:

  1. Manipulação de Conteúdo Dinâmico: Muitos sites modernos dependem fortemente de conteúdo dinâmico que é carregado ou gerado por meio de JavaScript. Técnicas tradicionais de scraping, como análise de HTML com bibliotecas como BeautifulSoup, podem não ser capazes de lidar com esse conteúdo dinâmico. O Selenium, por outro lado, é excelente em lidar com conteúdo dinâmico. Ele pode interagir com a página da web em tempo real, executar código JavaScript e recuperar o conteúdo totalmente renderizado, permitindo que você extraia dados de sites que dependem fortemente de JavaScript.
  2. Automação de Navegadores: O Selenium permite que você automatize navegadores web, replicando interações semelhantes às de um ser humano com as páginas da web. Isso significa que você pode navegar por várias páginas, clicar em botões, preencher formulários, enviar dados e realizar várias outras ações programaticamente. Ao simular interações humanas, o Selenium permite que você acesse dados que podem estar ocultos por trás de telas de login, interaja com funcionalidades baseadas em AJAX ou percorra conteúdo paginado. Esse nível de automação torna o Selenium uma ferramenta poderosa para fazer scraping de sites complexos.
  3. Suporte a Vários Navegadores: O Selenium oferece suporte a vários navegadores da web, como Chrome, Firefox, Safari e Internet Explorer, entre outros. Esse suporte a vários navegadores permite que você escolha o navegador que melhor se adapte às suas necessidades de scraping ou replique o comportamento do seu público-alvo. Você pode escrever seu código de scraping uma vez e alternar facilmente entre diferentes navegadores, garantindo compatibilidade e flexibilidade.
  4. Seleção Robusta de Elementos: O Selenium fornece uma ampla variedade de métodos para localizar elementos em uma página da web, incluindo por ID, classe, XPath, seletores CSS e outros. Essa flexibilidade permite que você direcione com precisão os elementos que deseja extrair. Além disso, o Selenium oferece métodos avançados de interação com elementos, permitindo que você extraia texto, valores de atributos, execute cliques e manipule várias interações do usuário com facilidade.
  5. Ecossistema e Suporte da Comunidade: O Selenium possui uma comunidade extensa e ativa de desenvolvedores, o que significa que você pode encontrar muitos recursos, tutoriais e discussões para ajudá-lo em seus projetos de web scraping. O extenso ecossistema em torno do Selenium inclui frameworks, wrappers e ferramentas de terceiros que fornecem recursos adicionais e tornam o web scraping mais eficiente.

Embora o Selenium seja uma ferramenta poderosa para web scraping, vale ressaltar que ele pode ser exagerado para tarefas de scraping simples. Se o site que você está visando não depende fortemente de conteúdo dinâmico ou JavaScript, ou se você só precisa extrair dados HTML estáticos, pode ser mais apropriado usar uma biblioteca leve como BeautifulSoup ou Requests. No entanto, quando enfrentar cenários complexos de scraping ou sites dinâmicos, as capacidades do Selenium se destacam, tornando-o uma escolha principal para muitos projetos de web scraping.

Aqui, um exemplo simples de código VBA  usando Selenium Basic.

Sub AutomatizarTarefaWeb()
    Dim driver As New SeleniumWrapper.WebDriver
    Dim elemento As SeleniumWrapper.WebElement
    
    ' Abrir o navegador e navegar para um site
    driver.Start "chrome", "https://www.example.com"
    driver.Get "/"
    
    ' Localizar um campo de entrada pelo seu ID e inserir texto
    Set elemento = driver.FindElementById("campoDeEntrada")
    elemento.SendKeys "Olá, Selenium!"
    
    ' Localizar um botão pelo XPath e clicar nele
    Set elemento = driver.FindElementByXPath("//button[@id='botaoEnviar']")
    elemento.Click
    
    ' Aguardar o carregamento da página
    driver.Wait 5000
    
    ' Extrair o texto de um elemento específico
    Set elemento = driver.FindElementByClassName("textoResultado")
    MsgBox "Resultado: " & elemento.Text
    
    ' Fechar o navegador
    driver.Quit
End Sub

Certifique-se de ter a biblioteca Selenium Basic instalada e referenciada em seu projeto VBA antes de executar este código. Você pode encontrar a biblioteca Selenium Basic e instruções de instalação em sua página oficial no GitHub: https://github.com/florentbr/SeleniumBasic

SeleniumBasic – Erro de automação

O problema

Imagine a seguinte cena:

Você desenvolve o projeto para seu cliente usando o Selenium VBA como biblioteca, tudo funciona perfeitamente, em todos os navegadores, drivers, etc. Todos os testes passam maravilhosamente.

Então você envia o arquivo junto com todas as instruções de instalação. Mas, quando o cliente executa seu arquivo, o seguinte erro é apresentado:

A solução

Instale o .NET Framework 3.5 no computador. Você pode fazer o download dele aqui:

https://docs.microsoft.com/en-us/dotnet/framework/install/dotnet-35-windows-10

Após instalado, execute o aplicativo novamente.

A explicação

Apesar de rodar no contexto do VBA, que é aplicativo nativo do Windows, o SeleniumBasic é desenvolvido sob o .NET Framework, especificamente a versão 3.5, o que faz sua execução ser dependente dele.

Não adianta ter somente o .NET Framework 2.0 ou 4.0. Eles são independentes e precisam ser instalados separadamente.

Finalmente

Nada mais a declarar. Bom código a todos!

VBA – ComboBox com duas colunas (ou mais do que isso)

Oh yeah! O ComboBox é muito mais versátil do que se pensa e neste vídeo, tento mostrar um pouco disso.

#VBA
#ComboBox

Código utilizado:

Private Sub CommandButton1_Click()
'MsgBox ComboBox1.List(ComboBox1.ListIndex, 1)
MsgBox ComboBox1.Value
End Sub
 
Private Sub UserForm_Initialize()
Dim Estados(1 To 5, 1 To 2) As String
 
'       L  C
Estados(1, 1) = "AC"
Estados(2, 1) = "BA"
Estados(3, 1) = "RJ"
Estados(4, 1) = "SP"
Estados(5, 1) = "SC"
 
'       L  C
Estados(1, 2) = "Acre"
Estados(2, 2) = "Bahia"
Estados(3, 2) = "Rio de Janeiro"
Estados(4, 2) = "São Paulo"
Estados(5, 2) = "Santa Catarina"
 
ComboBox1.List = Estados
End Sub

Acesse também

BLOG ► https://www.tomasvasquez.com.br/blog/
FÓRUM ► https://www.tomasvasquez.com.br/forum/
CURSO ONLINE DE C# ► https://www.tomasvasquez.com.br/cursocsharp

Aqui também!

FACEBOOK ► https://www.facebook.com/tomasvaquezsites
TWITTER ► https://twitter.com/tomamais
GOOGLE+ ► https://plus.google.com/+TomasvasquezBr/

Roteiro, apresentação, edição, etc, etc ► eu mesmo 🙂