Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SuperGrid

Um controle de grade de dados para UserForms do Excel, escrito em VBA puro.

Cabeçalho fixo, formatação por tipo, ordenação, filtro, rolagem, exportação. Sem ActiveX, sem instalação, sem nenhuma referência adicional.

Funciona do Excel 2007 ao Microsoft 365, em 32 e 64 bits.


Por que existe

O Excel não oferece um controle de grade para UserForms. Quem constrói aplicações em VBA tem três saídas, todas ruins:

  • ListBox do MSForms — o mais próximo de uma grade, mas a propriedade ColumnHeads só funciona quando o controle é amarrado a um intervalo de planilha via RowSource. Quem preenche por código, que é o caso normal, fica sem cabeçalho nenhum. Somam-se a isso o teto rígido de 10 colunas, a ausência de ordenação e filtro, e a impossibilidade de formatar por célula.
  • MSFlexGrid (ActiveX) — resolveria, mas exige registro na máquina, tem problemas de licenciamento e quebra em instalações de 64 bits.
  • Uma planilha fazendo as vezes de grade — funciona, mas não é um controle de janela: não dá para usar dentro de um UserForm, que é onde a aplicação VBA vive.

O SuperGrid preenche essa lacuna.


Como fica

Private WithEvents grade As SuperGrid

Private Sub UserForm_Initialize()
    Set grade = New SuperGrid
    grade.Vincular Me.frmDados

    With grade.Colunas
        .Adicionar "nome",  "Nome",       sgTexto
        .Adicionar "cpf",   "CPF",        sgCodigo
        .Adicionar "valor", "Valor",      sgMoeda
        .Adicionar "venc",  "Vencimento", sgData
    End With

    grade.CarregarDeIntervalo Planilha1.Range("A1").CurrentRegion
    grade.Montar
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    grade.Destruir
End Sub

Quinze linhas, e nenhuma delas desenha coisa alguma. A grade cria os próprios controles dentro de um Frame que você coloca no seu formulário.


Instalação

1. Insira um UserForm antes de importar. Parece dispensável e não é: um projeto VBA recém-criado não tem a referência ao MSForms — ela só aparece com o primeiro UserForm, e sem ela o componente não compila.

2. Alt+F11File → Import File, e selecione os arquivos de src/:

modSGTipos.bas        enums, constantes e códigos de erro
SGColuna.cls          definição de uma coluna
SGColunas.cls         coleção de colunas
SGEventoRotulo.cls    eventos dos controles criados em execução
SGEventoBarra.cls     eventos das barras de rolagem
SuperGrid.cls         a grade
modSGFormato.bas      formatação por tipo
modSGOrdenacao.bas    ordenação
modSGFiltro.bas       filtragem
modSGExportacao.bas   exportação e área de transferência

3. Debug → Compile. Precisa passar limpo, sem nenhuma referência nova.

Dois módulos são opcionais — importe só se precisar:

Módulo Para quê
modSGRodaMouse.bas rolagem pela roda do mouse
modSGRecordset.bas alimentar a grade a partir de ADO (Access, SQL Server, MySQL)

Recursos

Tipos de coluna — texto, código, inteiro, decimal, moeda, data, data e hora, booleano. O tipo governa formatação, alinhamento, ordenação e o comportamento na exportação.

sgCodigo preserva zeros à esquerda. É a diferença entre 00123456789 e 123456789 — para CPF, CNPJ e código de barras.

Ordenação e filtro — clique no cabeçalho ordena respeitando o tipo (número por valor, data por cronologia, texto pela ordem do português). O filtro é indiferente a maiúsculas e a acentos: sao encontra São Paulo.

Exportação — leva o recorte visível para uma planilha nova, com números e datas tipados: SOMA() funciona imediatamente. Valores iniciados por =, +, - ou @ chegam como texto literal, sem virar fórmula.

Somente leitura — a grade exibe, ordena, filtra, seleciona e exporta. Não edita.


Desempenho

O custo de tela é proporcional à área visível, nunca ao volume de dados: a grade cria só os controles que cabem na janela e reescreve o conteúdo deles ao rolar. Uma grade de 200.000 linhas usa os mesmos ~314 controles que uma de 100.

Medido em Excel 2013, 32 bits:

Linhas Montar Rolar Ordenar Filtrar Controles
1.000 8 ms 0,9 ms 4 ms < 1 ms 314
32.000 27 ms 0,8 ms 102 ms 55 ms 314
200.000 55 ms 0,7 ms 605 ms 324 ms 314

Demonstração

Abra demo/SuperGridDemo.xlsm e rode AbrirSuperGrid (Alt+F8).

O combo alterna entre quatro conjuntos de dados com origens diferentes, todos rodando no mesmo controlador:

Conjunto Origem
Clientes matriz montada em código
Produtos matriz montada em código
Estoque Range.Value de uma planilha
Access Recordset ADO de um banco .accdb

ComportamentoAccess.cls aponta para um caminho de exemplo — ajuste CAMINHO_BANCO e CONSULTA para testar com um banco seu.


Documentação

Documento Conteúdo
Guia de uso instalação, primeira grade, receitas
Referência da API todos os membros públicos e códigos de erro
Padrões de uso como organizar quando a grade aparece em muitos lugares
Ambiente ferramentas de desenvolvimento e armadilhas do Import
Verificação manual o que foi testado, como, e o que ficou pendente

Desenvolvimento

Os arquivos de texto em src/ e tests/ são o código. A pasta de trabalho é artefato descartável, regenerável a qualquer momento.

python tools/criar_workbook.py     cria build/SuperGridDev.xlsm
python tools/sincronizar.py        importa os módulos e compila
python tools/rodar_testes.py       353 testes automatizados

As ferramentas usam vba-editor para manipular os módulos VBA sem abrir o editor à mão. Requerem pywin32 e a opção "Confiar no acesso ao modelo de objeto do projeto do VBA" habilitada no Excel.

Os testes usam asserções próprias, sem framework externo — para rodarem em qualquer Excel, inclusive no 2007, que é onde a compatibilidade precisa ser verificada.


Estado

353 testes automatizados passando. Exportação, ordenação, filtro, formatação, ciclo de vida e vazamento de memória verificados; roda do mouse testada com eventos reais do Windows.

Pendente: a verificação em Excel 2007 de 32 bits e em Microsoft 365 de 64 bits não foi feita — a máquina de desenvolvimento tem apenas o 2013. O núcleo é VBA6 estrito e toda construção de VBA7 está isolada no módulo opcional, o que é verificado automaticamente, mas isso não substitui rodar de verdade nas duas pontas. Detalhes em matriz-verificacao-manual.md.


Licença

MIT — veja LICENSE.

About

Grade de dados para UserForms do Excel em VBA puro. Cabecalho fixo, ordenacao, filtro e exportacao. Sem ActiveX e sem referencias adicionais. Excel 2007 a 365, 32 e 64 bits.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages