Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Alinhar coluna do Listbox (pesquisa)

Esclarecimentos e dúvidas sob o Modelo de Aplicativo de Cadastro em VBA no Microsoft Excel publicado no site e blog http://www.tomasvasquez.com.br
NERI INACIO
Colaborador
Colaborador
Mensagens: 62
Registrado em: Sáb Fev 27, 2016 7:31 pm

Alinhar coluna do Listbox (pesquisa)

Mensagem por NERI INACIO »

Simplifiquei a minha postagem para que seja mais fácil compreender.

Eu estava trabalhando com o Listview que é muito bom. O problema que em 64 bits não tem suporte.

Resolvi voltar para o Listbox. Agora tenho um pequeno problema: quero alinhar uma coluna para a direita e formatar em R$ .

Coloquei a parte que faz o filtro que ao clicar aciona o PopulaListBox.
Supondo que (no meu exemplo, a última coluna fosse valor, como poderia alterar para que ele formatasse em R$ e alinhasse a direita?


Vou colocar abaixo o formulário Pesquisa que é o normal e funciona bem (só não alinha a coluna à direita e não formata). fiz inúmeras consultas e encontrei uma dica super legal no site Clube do Hardware. Lá tem um exemplo, fiz e funciona para alinhamento à direita (usando fonte Courier). Só não tem o "filtro" de pesquisa. Então, juntando os dois (vou postar abaixo) teremos um ótimo resultado.

Alguém consegue me ajudar? Não consegui fazer, mas quem tem mais conhecimento nesta área poderá me ajudar e ficarei muitíssimo agradecido.

Pesquisa do Formulário (Exemplo do Tomas):

Private Sub btnFiltrar_Click()
Call PopulaListBox(txtNomeEmpresa.Text, txtCNPJ.Text, txtEndereco.Text, txtTelefone.Text, txtCidade.Text, txtValor.Text)
End Sub


Private Sub PopulaListBox(ByVal NomeEmpresa As String, _
ByVal CNPJ As String, _
ByVal Endereco As String, _
ByVal Telefone As String, _
ByVal Cidade As String, _
ByVal Valor As String)

On Error GoTo TrataErro

Dim conn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sql As String
Dim sqlWhere As String
Dim sqlOrderBy As String
Dim i As Integer
Dim campo As Field
Dim myArray() As Variant

Set conn = New ADODB.Connection
With conn
.Provider = "Microsoft.JET.OLEDB.4.0"
.ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 8.0;"
.Open
End With

sql = "SELECT * FROM [Clientes$]"

'monta a cláusula WHERE
'NomeDaEmpresa
Call MontaClausulaWhere(txtNomeEmpresa.Name, "NomeDaEmpresa", sqlWhere)

'CNPJ
Call MontaClausulaWhere(txtCNPJ.Name, "CNPJ", sqlWhere)

'Endereço
Call MontaClausulaWhere(txtEndereco.Name, "Endereço", sqlWhere)

'Cidade
Call MontaClausulaWhere(txtCidade.Name, "Cidade", sqlWhere)

'Telefone
Call MontaClausulaWhere(txtTelefone.Name, "Telefone", sqlWhere)

'VALOR
Call MontaClausulaWhere(txtValor.Name, "Valor", sqlWhere)

'faz a união da string SQL com a cláusula WHERE
If sqlWhere <> vbNullString Then
sql = sql & " WHERE " & sqlWhere
End If




************************************************************************************************************
Exemplo do Clube do Hardware:
Parte do Formulário:
Private Sub UserForm_Activate()
'Ao clicar no botão que está na planilha
'é acessado o módulo onde o retorno da função Listando
'carrega o LstView.
Lstview.List = ModArrayList.Listando
End Sub

Parte do Módulo ModArrayList:
Function Listando()
Dim linhasPlan As Long
Dim matriz()
Dim lin As Long
Dim col As Integer
Dim valorStr As String
'Fazendo a leitura de quantas linhas de dados _
tenho na planilha ativa, a estando no módulo _
uma forma de mostrar qual é a planilha ativa _
é evocando o objeto que interessa, no caso do _
exemplo é "Plan1".

'Range("VT_DATA"), está relacionando na propriedade _
Range a coleção de células selecionadas e nomeadas _
com VT_DATA. Isso é feito na "caixa de nome" ao lado _
da "caixa de formulas" [fx]. Isso assegura ter a contagem _
de linhas corretas, pois certamente toda descrição de _
duplicata terá uma data.

linhasPlan = WorksheetFunction.CountA(Sheets("plan1").Range("VT_DATA"))

'agora temos condição de redimensionarmos a matriz

ReDim matriz(lin To linhasPlan, col To 3)

'limpa o objeto ListBox

FrmLista.Lstview.Clear
'limpando a matriz

For i = 0 To linhasPlan
For j = 0 To 2
matriz(i, j) = Empty
Next j
Next i

'Montando o cabeçalho
matriz(0, 0) = "DATA"
matriz(0, 1) = "DESCRIÇÃO"
matriz(0, 2) = "VALOR EM R$"

'acrescentando os dados da Worksheet na matriz
For i = 1 To linhasPlan
For j = 0 To 2
If j = 2 Then 'coluna de valores
'O Valor é convertido para String que formatado
'a variável valorStr recebe o Valor ajustado com
'a função Space onde tenho uma expressão que
'verifica com a função Len o tamanho da String
'menos 10 caracteres sugeridos, assim completa
'com espaços em branco a frente do valor alinhando
'todos os valores a direita.
valorStr = Format(CStr(Sheets("plan1").Cells(i + 1, j + 1)), "###,##0.00")
matriz(i, j) = Space(10 - Len(valorStr)) & valorStr
Else
matriz(i, j) = Sheets("plan1").Cells(i + 1, j + 1)
End If

Next j
Next i
Listando = matriz
End Function
Editado pela última vez por NERI INACIO em Sex Abr 06, 2018 10:21 pm, em um total de 2 vezes.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


NERI INACIO
Colaborador
Colaborador
Mensagens: 62
Registrado em: Sáb Fev 27, 2016 7:31 pm

Re: Alinhar coluna do Listbox (pesquisa)

Mensagem por NERI INACIO »

Pessoal ...Se alguém tiver um outro exemplo de listbox que tenha filtros e também tenha uma coluna formatado em currency (R$) e alinhado a direita, por favor poste para que possa utilizar como exemplo. Obrigado.


Responder