Arquivo da categoria: Access

Dicas sobre o gerenciador de banco de dados do pacote Office

Especial – Modelo de Cadastro em Excel e VBA com banco de dados em Access

Mais um fruto do nosso fórum, que para muitos vai valer como um presente de Natal. 😀

E essa mereceu, tanto pela proeza, quando pelo fato desta ser uma promessa que havia feito aos leitores do blog a algum tempo. Então, além do reconhecimento, já adianto meu agradecimento.

Depois de ter criado o fórum para falar especificamente sobre integração de Excel e Access:

http://www.tomasvasquez.com.br/forum/viewforum.php?f=22

O pessoal começou se mobilizou para criar uma versão do nosso Modelo de Cadastro em Excel para funcionar com banco de dados em Access ao invés de em uma planilha de Excel. O que resultado foi uma adaptação muito bacana e pode ser visto visualmente nas figuras abaixo:

Tela de Cadastro

Tela de Cadastro

Tela de Pesquisa

Tela de Pesquisa

A tela de pesquisa segue um padrão diferenciado do modelo original, mas tão simples quanto útil!

Para acessar o modelo, bem como a discussão sobre ele, alterações, correções e também para conhecer seus autores, basta ir ao tópico do fórum onde foi disponibilizado:

http://tomasvasquez.com.br/forum/viewtopic.php?f=22&t=1422

Como é uma dúvida comum, é bom lembrar que a grande vantagem deste modelo é usufruir da versatilidade do Excel, somada a robustez do Access, bastando apenas ter o Excel instalado. Isso mesmo, sem Access!

Aproveito para deixar aqui meu agradecimento a todos os membros do fórum, que além de auxiliar com suas dúvidas, respostas e exemplos, partilham também de um espírito de colaboração que só o faz engrandecer a cada dia.

Bom proveito!

VBA – Ordenando Arrays Multi Dimensionais

Mais uma do fórum, dessa vez, da autoria do colega André.

O código abaixo faz a ordenação de um array multidimensional, incrementando um exemplo já colocado aqui no blog que fazia o trabalho, mas somente com em arrays com uma dimensão. Bom, o código e seus comentários falam por si:

'@Sort ArrayMulti
'@Data: 04/08/2010
'@Autor: André Tonini
'   Esta função ordena um array multidimensional
'   Parametros
'       @TheArray - Array - Array que será ordenado
'       @Column - Integer - Por qual coluna o array será ordenado
'       @ColumnCount - Integer - O número de colunas do array
 
Public Function SortArrayMulti(ByRef TheArray As Variant, _
                                    Column, _
                                    ColumnCount)
    'Variaveis
    '----------
    Dim temp()
    Dim x, i, y As Integer
    Dim sorted As Boolean
 
    'Dimensões do array
    '------------------
    ReDim Preserve temp(1 To UBound(TheArray, Column), 1 To ColumnCount)
 
 
    'Repetição para ordenar até o final do array
    '--------------------------------------------
    Do While Not sorted
 
        'No inicio ele está ordenado
        '--------------------------
        sorted = True
 
        'Laço que percorre as linhas
        '----------------------------
        For x = linhaCabecalho + 1 To UBound(TheArray, Column) - 1
 
            'Faz a comparação
            '----------------
            If (TheArray(x, Column) > TheArray(x + 1, Column) And TheArray(x + 1, Column) <> Empty) Then
 
                'Ando por todas as colunas
                '-------------------------
                For y = 1 To ColumnCount
                    temp(x, y) = TheArray(x + 1, y)
                Next y
 
                'Ando por todas as colunas
                '-------------------------
                For y = 1 To ColumnCount
                    TheArray(x + 1, y) = TheArray(x, y)
                Next y
 
                'Ando por todas as colunas
                '-------------------------
                For y = 1 To ColumnCount
                    TheArray(x, y) = temp(x, y)
                Next y
 
                'Passou pelo if, então não está ordenado
                '---------------------------------------
                sorted = False
 
            End If
        Next x
    Loop
 
End Function

Valeu André!

VBA – Excluindo um módulo VBA programaticamente

Na necessidade de automação de projetos VBA, não é raro termos que manipular alguns de seus objetos, principalmente na questão de segurança. Uma delas e muito interessante é a manipulação de módulos VBA. Neste caso, o código abaixo efetua a exclusão de um módulo de nome Módulo1:

Sub ExcluirModuloVBA()
 
    Dim vbCom As Object
    Dim NomeModulo As String
    NomeModulo = "Módulo1"
    Set vbCom = Application.VBE.ActiveVBProject.VBComponents
 
    vbCom.Remove VBComponent:= vbCom.Item(NomeModulo)
    MsgBox NomeModulo & " excluído com sucesso"
 
End Sub

Lembrando, para que o códigos de manipulação de objetos VBA funcionem corretamente, é preciso habilitar a opção “Confiar no acesso ao modelo de objeto no projeto do VBA” na janela de Segurança de Macros.

Referências
http://www.ozgrid.com/VBA/delete-module.htm

VBA – Retornando o nome do usuário logado

personal information

No VBA, a opção mais trivial para obter o nome do usuário logado na máquina é através de uma chamada a API advapi32.dll.  Nada contra APIs, mas sempre que puder evitar de usá-las, eu prefiro, já que suas chamadas são feitas em baixo nível e requerem um nível de conhecimento bem avançado desta.

Abaixo segue um exemplo que efetua a tarefa sem a necessidade de API no VBA:

'Function que retorna o nome do usuário de rede logado
 
Function UsuarioRede() As String
    Dim GetUserN
    Dim ObjNetwork
    Set ObjNetwork = CreateObject("WScript.Network")
    GetUserN = ObjNetwork.UserName
    UsuarioRede = GetUserN
End Function
 
Sub Mostra()
    MsgBox UsuarioRede
End Sub

O código faz uso do objeto WScript.Network, comumente encontrado nas versões mais atuais do Windows, dispensando referências manuais. Se não me engano, obtive este código em uma edição revista da FórumAccess. Quanto a autoria, ela é do Luiz Cláudio Vieira da Rocha, renomado especialista em Office no Brasil.

Bom proveito a todos!