Se você já precisou gerar uma lista delimitada de valores de campos/consultas juntamente com outras informações do seu banco de dados, sabe que pode ser um desafio e, na melhor das hipóteses, uma tarefa que a maioria das pessoas considera impossível. Se, por exemplo, você foi solicitado a gerar um relatório com os 5 melhores vendedores – em ordem decrescente – de cada mês do ano, ou as 3 lojas mais próximas de cada cliente, você provavelmente terá que lidar com consultas de tabela cruzada ou combinar os resultados manualmente fora do Access. Mas com um pouco de código VBA, você poderá gerar resultados como os seguintes em minutos…
| Jan | John, Sally, Bill |
| Fev | Sally, Adam, John |
| Mar | Adam, Sally, Bill |
Muitas vezes seria útil poder exibir uma lista delimitada de resultados como parte de uma consulta maior – uma lista dos 3 maiores clientes para cada representante de vendas, as 5 lojas mais próximas de cada um de seus clientes que gastam mais , A lista continua.
Pare de costurar seu relatório
Embora seja mais do que possível obter os detalhes para criar esse tipo de relatório, você geralmente acaba tendo que unir manualmente os resultados fora do Access como parte de uma planilha ou relatório.
O código a seguir elimina a necessidade de mexer nos resultados da consulta fora do Access e, em vez disso, permitirá que você produza o tipo de resultado mostrado acima com facilidade.
Primeiro, vamos descrever o que queremos que o código seja capaz de fazer:
“Dada uma consulta, retorna x número de resultados, combinados em uma única string delimitada por y”
Antes de começarmos
Antes de examinarmos o código, é importante observar que, embora seja possível criar uma função VBA mais genérica e capaz de lidar com qualquer combinação de consulta, isso resultaria em um código bastante longo. é definir um caso de exemplo e escrever a função para lidar com esse caso. Fazer dessa maneira facilitará muito a recriação do código para atender às suas necessidades específicas.
O exemplo de caso
Temos um banco de dados de vendas que armazena detalhes das compras dos clientes, juntamente com a categoria de produto a que pertence a compra. Queremos produzir um relatório que mostre, por mês, as 3 principais categorias em ordem decrescente.
Para simplificar, manteremos o exemplo em uma única tabela, embora o principal funcione independentemente de sua configuração. A tabela que usaremos está configurada da seguinte maneira:
| Vendas |
| Nome do cliente |
| Data da Transação |
| Valor da Transação |
| Categoria |
Obviamente, esta é uma configuração excessivamente simplificada, mas você entendeu.
Agora - o código
Public Function CategoryList(Month As String, NumResults As Integer, SortAscending As Boolean, Delimiter As String) As String
Dim sSql, resultString As String
Dim rst As Recordset
Dim firstLine As Boolean
'Create our SQL string using the supplied parameters
sSql = "SELECT TOP " & NumResults & " [category] FROM sales GROUP BY Format([TransactionDate],""mmm""), sales.Category HAVING (((Format([TransactionDate], ""mmm"")) = """ & Month & """))"
If SortAscending Then sSql = sSql & " ORDER BY Sum(sales.TransactionValue) DESC;"
Set rst = CurrentDb.OpenRecordset(sSql)
firstLine = True
'Loop through the results, and create the string to return
With rst
Do While Not .EOF
If Not firstLine Then
resultString = resultString & Delimiter & .Fields("category")
Else
resultString = resultString & .Fields("category")
firstLine = False
End If
.MoveNext
Loop
End With
Set rs = Nothing
CategoryList = resultString
End Function
O código – explicado

Você notará que verificamos se devemos ou não adicionar um delimitador à string ou não - sem essa verificação, você terminaria com uma string de resultado mal formatada ou teria que adicionar código para remover delimitadores indesejados - desta forma mantém as coisas agradáveis e organizadas desde o início.
A função em si pode, é claro, ser chamada de dentro de uma consulta, um relatório ou de qualquer lugar que você desejar no Access.
Corrigir banco de dados de acesso corrompido
Se você encontrar bancos de dados do Access corrompidos quando você executa o código acima, é melhor usar alguma ferramenta especializada para repará-los e recuperar todas as tabelas dos bancos de dados corrompidos.
Introdução do autor:
Mitchell Pond é um especialista em recuperação de dados em DataNumen, Inc., líder mundial em tecnologias de recuperação de dados, incluindo reparar problema de SQL e produtos de software de recuperação do Excel. Para mais informações visite www.datanumen.com