Propósito

✔ Programação GLOBAL® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog devem ser tratados como consultoria freelance. Queiram contatar-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.

VBA Access - Deletando tabelas e querys programaticamente - VBA Access: How to Programmatically Delete Tables and Queries

VBA Access - Deletando tabelas e querys programaticamente - VBA Access: How to Programmatically Delete Tables and Queries

Quando estamos criando múltiplas tabelas atualizáveis dinamicamente no MS Access e as disponibilizando para consultas externas como no próprio Access, Excel, Word ou Powerpoint, por vezes precisaremos checar se os seus respectivos nomes já não existem e em caso positivo deletá-las.

Uma funcionalidade para tal execução no próprio MS Access, através do nome da tabela, é a que descrevo abaixo:

    Function CheckTable(nTable As String)
        ' André Bernardes             06/06/2008 07:23    bernardess@gmail.com
        Dim db As Database
        Dim i As Integer

        Set db = DBEngine.Workspaces(0).Databases(0)

        db.TableDefs.Refresh

        For i = 0 To db.TableDefs.Count - 1
            If nTable = db.TableDefs(i).Name Then
                DoCmd.DeleteObject acTable, nTable      ' Table Exists.

                Exit For
            End If
        Next i

        Set db = Nothing
    End Function

' Função para verificar e excluir uma tabela no banco de dados do Access
' Melhorada por [Seu Nome] em [Data Atual]
' Revisado para melhorar legibilidade e robustez do código

Function CheckTable(nTable As String)
    ' Declaração das variáveis
    Dim db As Database  ' Objeto de banco de dados
    Dim i As Integer    ' Contador para iterar sobre as tabelas

    ' Verifica se o nome da tabela foi fornecido corretamente
    If Len(Trim(nTable)) = 0 Then
        MsgBox "Nome da tabela não fornecido.", vbExclamation, "Erro"
        Exit Function
    End If

    ' Define o objeto de banco de dados como o banco de dados atual
    Set db = DBEngine.Workspaces(0).Databases(0)

    ' Atualiza a coleção de TableDefs para garantir que estamos vendo as tabelas mais recentes
    db.TableDefs.Refresh

    ' Itera sobre todas as tabelas no banco de dados
    For i = 0 To db.TableDefs.Count - 1
        ' Verifica se a tabela existe comparando o nome
        If nTable = db.TableDefs(i).Name Then
            ' Se a tabela existir, deleta a tabela
            DoCmd.DeleteObject acTable, nTable
            MsgBox "Tabela '" & nTable & "' foi deletada com sucesso.", vbInformation, "Sucesso"
            Exit Function  ' Sai da função após deletar a tabela
        End If
    Next i

    ' Caso a tabela não seja encontrada
    MsgBox "Tabela '" & nTable & "' não encontrada.", vbExclamation, "Erro"

    ' Libera o objeto de banco de dados para evitar vazamentos de memória
    Set db = Nothing
End Function


Para deletarmos Querys, utilizaríamos:


Function CheckQuery(nQuery As String)
    ' Author:                     Date:               Contact:
    ' André Bernardes             30/04/2009 11:26    bernardess@gmail.com
    ' .

    Dim db As Database
    Dim i As Integer

    Set db = DBEngine.Workspaces(0).Databases(0)

    db.QueryDefs.Refresh

    For i = 0 To db.QueryDefs.Count - 1
        If nQuery = db.QueryDefs(i).Name Then
            DoCmd.DeleteObject acQuery, nQuery      ' Query Exists.

            Exit For
        End If
    Next i

    Set db = Nothing
End Function


' Função para verificar e excluir uma consulta no banco de dados do Access
' Melhorada por [Seu Nome] em [Data Atual]
' Revisado para melhorar legibilidade, robustez e adicionar tratamento de erros

Function CheckQuery(nQuery As String)
    ' Declaração das variáveis
    Dim db As Database  ' Objeto de banco de dados
    Dim i As Integer    ' Contador para iterar sobre as consultas

    ' Verifica se o nome da consulta foi fornecido corretamente
    If Len(Trim(nQuery)) = 0 Then
        MsgBox "Nome da consulta não fornecido.", vbExclamation, "Erro"
        Exit Function
    End If

    ' Define o objeto de banco de dados como o banco de dados atual
    Set db = DBEngine.Workspaces(0).Databases(0)

    ' Atualiza a coleção de QueryDefs para garantir que estamos vendo as consultas mais recentes
    db.QueryDefs.Refresh

    ' Itera sobre todas as consultas no banco de dados
    For i = 0 To db.QueryDefs.Count - 1
        ' Verifica se a consulta existe comparando o nome
        If nQuery = db.QueryDefs(i).Name Then
            ' Se a consulta existir, deleta a consulta
            DoCmd.DeleteObject acQuery, nQuery
            MsgBox "Consulta '" & nQuery & "' foi deletada com sucesso.", vbInformation, "Sucesso"
            Exit Function  ' Sai da função após deletar a consulta
        End If
    Next i

    ' Caso a consulta não seja encontrada
    MsgBox "Consulta '" & nQuery & "' não encontrada.", vbExclamation, "Erro"

    ' Libera o objeto de banco de dados para evitar vazamentos de memória
    Set db = Nothing
End Function


 Clique aqui e nos contate via What's App para avaliarmos seus projetos 

Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com


 Série de Livros nut Project 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes


 PUDIM PROJECT 

eBook - PT - PUDIM PROJECT 2024 - Python Volume 01 - Funções Essenciais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 02 - Funções Essenciais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 03 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 04 - Funções para Automatização - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 05 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 06 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 07 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 08 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 09 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 10 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 11 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes

VBA Access - Copiando query com outro nome programaticamente - How to Programmatically Copy a Query with a New Name

VBA Access: Copiando query com outro nome programaticamente.


Hello Folks!

Não raro ocorre a necessidade de copiarmos o conteúdo de uma query existente para outra com um nome diferente. Quando esta necessidade surgir, não precisará perder tempo em saber como fazê-lo, abaixo está o caminho.

Dica: Uma forma similar pode ser utilizada para copiar quaisquer objeto do MS Access.

 Sybase's PROCs 

Exemplo Básico de Execução de Stored Procedure

 

Function CpyNQry(nQryNm As String, nQryNm As String) As Boolean
' André Bernardes 04/2009 bernardess@gmail.com
' Copia uma query qualquer para outra com outro nome.

CurrentDb().CreateQueryDef nQryNm, CurrentDb().QueryDefs(QryNm).SQL

Let CpyNQry = (Len(CurrentDb().QueryDefs(nQryNm).Name) > 0)

Application.RefreshDatabaseWindow
End Function

 Clique aqui e nos contate via What's App para avaliarmos seus projetos 

Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com


 Série de Livros nut Project 

DONUT PROJECT: VBA - Projetos e Códigos de Visual Basic for Applications (Visual Basic For Apllication)eBook - DONUT PROJECT 2024 - Volume 03 - Funções Financeiras - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 02 - Conectando Banco de Dados - André Luiz Bernardes eBook - DONUT PROJECT 2024 - Volume 01 - André Luiz Bernardes


 PUDIM PROJECT 

eBook - PT - PUDIM PROJECT 2024 - Python Volume 01 - Funções Essenciais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 02 - Funções Essenciais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 03 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 04 - Funções para Automatização - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 05 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 06 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 07 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 08 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 09 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes


eBook - PT - PUDIM PROJECT 2024 - Python Volume 10 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes eBook - PT - PUDIM PROJECT 2024 - Python Volume 11 - Automatizando Postagens em Redes e Plataformas Sociais - Série PUDIM PROJECT — André Luiz Bernardes

VBA Excel: Definindo o tipo de Gráfico.

Qdo o gráfico estiver ativo, use a propriedade ActiveChart para fazer referência a ele. O gráfico fica ativo se o usuário o selecionou ou se foi ativado com o método Activate.

O exemplo abaixo ativa o 1º gráfico e, em seguida, define o título e o tipo dele.

Charts(1).Activate
With ActiveChart
    .Type = xlLine
    .HasTitle = True
    .ChartTitle.Text = "Vendas de Janeiro"
End With


André Luiz Bernardes
A&A - WORK, DON´T PLAY!
http://al-bernardes.sites.uol.com.br/
bernardess@gmail.com

VBA Excel: Realizando loops no intervalo nomeado

Não raro nomeamos um intervalo, range, de dados para a manipulação mais precisa. Também podemos fazê-lo para cuidar de certos aspectos da formatação.

Abaixo temos um código que faz um loop através de cada célula de um intervalo nomeado usando um loop For Each...Next. Se o valor de qualquer célula do intervalo exceder o valor de limit, a cor da célula será alterada para amarelo.


Sub ApplyColor()
    Const Limit As Integer = 25
    For Each c In Range("MyRange")
        If c.Value > Limit Then
            c.Interior.ColorIndex = 27
        End If
    Next c
End Sub
Código funcional e prático para montar semáforos em uma planilha de dados que aponta resultados.

André Luiz Bernardes
A&A - WORK, DON´T PLAY!
http://al-bernardes.sites.uol.com.br/
bernardess@gmail.com

VBA Excel - Gráfico - Redefine tamanho de bolha

Este exemplo define o tamanho de bolha do grupo gráfico um como 96% do tamanho padrão se o gráfico for um gráfico de bolhas 2D.

With Worksheets(1).ChartObjects(1).Chart
    If .ChartType = xlBubble Then
        .ChartGroups(1).BubbleScale = 96
    End If
End With
André Luiz Bernardes
A&A - WORK, DON´T PLAY!
http://al-bernardes.sites.uol.com.br/
bernardess@gmail.com

VBA Office: Controlando aplicativo Office a partir de outro.

Talvez deseje executar código em um aplicativo do MS Office que trabalhe com os objetos de um outro aplicativo.

É importantíssimo definir uma referência à biblioteca de tipos do outro aplicativo na caixa de diálogo Referências (menu Ferramentas). Logo após, os objetos, propriedades e métodos ficarão disponíveis no pesquisador de objetos e a sintaxe será verificada durante a compilação, além de pode obter ajuda contextual.

Declare as variáveis de objeto que se referirem aos objetos de outro aplicativo com tipos específicos.

Certifique-se de qualificar cada tipo com o nome do aplicativo que está fornecendo o objeto.


Por exemplo, abaixo a instrução declara uma variável que apontará para um documento do MS Word e uma outra que se referirá a uma pasta de trabalho do MS Excel:
Dim appWD As Word.Application, wbXL As Excel.Workbook
Obs: Precisa seguir os passos anteriores se desejar que seu código seja de acoplamento antecipado.

Use também a função CreateObject com Identificadores de programação OLE do objeto do outro aplicativo com o qual você deseja trabalhar. Caso deseje visualizar a sessão do outro aplicativo, defina a propriedade Visible como True.

Dim appWD As Word.Application

Set appWD = CreateObject("Word.Application")
appWd.Visible = True
Aplique propriedades e métodos ao objeto contido na variável.
[code]Dim appWD As Word.Application[/code]

Set appWD = CreateObject("Word.Application")
appWD.Documents.Add

Acima a instrução cria um novo documento do Word.

Ao terminar o trabalho com o outro aplicativo, use o método Quit para fechá-lo

appWd.Quit

André Luiz Bernardes
A&A - WORK, DON´T PLAY!
http://al-bernardes.sites.uol.com.br/
bernardess@gmail.com

MS Excel: Muito mais do que planilhas eletrônicas.

Caros "foristas",

A alguns anos conheci os produtos da Microsoft não no formato fechado que temos hoje como MS Office. Antes, eram um punhado de produtos desconexos e não alinhados, sem qualquer inteiração prática. Mesmo assim eram infinitamente melhores do que o Wordstar e Lotus 123, sem falar no Supercalc (Quem os conheceu, sabe do que estou falando). Com o amadurecimento do mercado a Microsoft teve o insight de que softwares de caixinha seriam o grande 'boom' das próximas décadas. Todos os produtos citados anteriormente e mais alguns que entraram e saíram do pacote Office, foram integrados e literalmente amarrados entre si, até chegarmos ao modelo expetacular (na minha humilde opinião, menos a interface do Access), a que temos acesso na versão 2007. Desenvolvo soluções com o MS Excel, MS Access, MS Word, MS Powerpoint e MS Outlook. Enfim, toda a suíte office e alguns outros produtos.

Muitos dos produtos do MS Office conheço a mais de 10 anos, então proponho ampliarmos o escopo sobre o quanto se conhece do MS Excel, a mais do que apenas os níveis Básico e Avançado; Experts e Iniciantes, ou algo similar. Antes, poderíamos estendê-lo a todos os âmbitos que ele permitir, como as aplicações em:

:. : Criação de Dashboards e Scorecards

:. : Desenvolvimento de MIS

:. : Aplicação do mesmo com BSC

:. : Utilização do mesmo no apontamento de KPIs

:. : E a sua integração com os diversos BIs do mercado

Muitos dos tópicos apontados acima necessitam de um relevante conhecimento sobre VBA, mas não somente este. Precisa-se conhecer também a respeito de Banco de Dados, conceitos de modelagem de dados, ERP, SCM, B2B, etc...

:. : A utilização de gráficos, bem como sua implementação, a além daqueles que estão como standards dariam um capítulo à parte nesta nossa discussão.

:. : E o que dizer da utilização do Solver. Certamente muitos sequer ouviram falar dele e como este pode ser útil diariamente.

:. : Outro capítulo à parte seria o modo flexível como o  MS Excel pode conectar-se a outras base de dados, e o poder de exportar informações até mesmo em XML. Conectar cubos OLAP, o modo como é utilizado no BI do SAP (BW - Business Warehouse) por exemplo.

E imagine, todas essas funcionalidades são expansíveis 'n' vezes quando associadas a imaginação e criatividades brasileiras.

Enfim, sugiro, ampliarmos o escopo a altura do que o  MS Excel representa na vida de todos os profissionais que o utilizam massiva e diariamente.

Para que possamos refletir melhor no quão amplo é o universo das aplicabilidades do  MS Excel, sugiro lerem esta lista com mais de 30 títulos, escritos por pessoas que vêem no MS Excel uma excelente ferramenta de manipulação do seu modelo de negócio.

Até mais e boa reflexão.

André Luiz Bernardes
A&A - WORK, DON´T PLAY!
http://al-bernardes.sites.uol.com.br/
bernardess@gmail.com

VBA Excel: Navegando entre as pastas existentes

Um recurso interessante quando queremos propiciar a navegação entre diversas pastas (Sheets) de uma mesma planilha é criarmos um formulário, colocando nele 2 botões para navegação. Um para a direita, que avançará e outro botão para a esquerda que retornará.

No caso abaixo, além de avançarmos as pastas o botão ainda posicionará na mesma célula em que estávamos na planilha corrente.

Essa facilidade de navegação é interessante. Experimente!


Sub DOSSC()
    ' Author:                             Date:                       Contact:
    ' André Bernardes             16/09/2008 14:33    bernardess@gmail.com
    ' Move-se para a esquerda, quando não houver mais pastas avisa automaticamente.
    ' DOSSC=down one sheet same cell

    On Error Resume Next
   
    Application.Goto Reference:=ActiveWorkbook.Sheets(ActiveSheet.Index - 1).Range(ActiveCell.Address)
    
    ' Caso ocorra um erro, aborta a Sub e envia mensagem.
    If Err.Number = 0 Then Exit Sub
   
    MsgBox ("Não é possível retornar mais, você está posicionado na primeira pasta, (" & Application.ActiveSheet.Name & ")")  'Caso o usuário esteja na primeira past (sheet).
End Sub

Sub UOSSC()
    ' Author:                             Date:                       Contact:
    ' André Bernardes             16/09/2008 14:39    bernardess@gmail.com
    ' Move-se para a direita, quando não houver mais pastas avisa automaticamente.
    ' UOSSC=up one sheet same cell

    On Error Resume Next
   
    Application.Goto Reference:=ActiveWorkbook.Sheets(ActiveSheet.Index + 1).Range(ActiveCell.Address)
    
    ' Caso ocorra um erro, aborta a Sub e envia mensagem.
    If Err.Number = 0 Then Exit Sub

    MsgBox ("Não é possível avançar mais, você está posicionado na última pasta, (" & Application.ActiveSheet.Name & ")")  'Caso o usuário esteja na primeira past (sheet).
End Sub

André Luiz Bernardes
A&A - WORK, DON´T PLAY!
http://al-bernardes.sites.uol.com.br/
bernardess@gmail.com

+55 (13) 9152-2565
diHITT - Notícias