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.
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:
ListBoxdo MSForms — o mais próximo de uma grade, mas a propriedadeColumnHeadssó funciona quando o controle é amarrado a um intervalo de planilha viaRowSource. 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.
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 SubQuinze 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.
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+F11 → File → 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) |
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.
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 |
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.
| 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 |
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.
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.
MIT — veja LICENSE.