Notifications
Clear all

Listbox alterar código pela descrição

9 Posts
3 Usuários
0 Reactions
1,843 Visualizações
NERI S
(@neri-s)
Posts: 0
Estimable Member
Topic starter
 

Utilizo o codigo abaixo quando tenho Lisview e funciona. 

Agora preciso utilizar Listbox e não sei as alterações a fazer. Alguém me ajuda?

Explicando:

1) A planilha dos dados chama-se OS. Ao salvar a mesma ao invés de salvar o nome do cliente, salvo o código (caso haja alguma alteração). Por este motivo no Select faço referencia a planilha Clientes.

2) Na parte do From informo as planilhas base de onde são extraídos os dados, neste caso planilha OS e clientes;

3) Ao montar a Where do cliente, vai até a planilha OS e pega o código do cliente. Após isto ele substitui o codigo pelo nome que está registrado lá em clientes.

Private Sub PopulaListBox()

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 [OS$].[Codigo] ,[OS$].[Statusservico],[Clientes$].[Cliente] "

sql = sql & "FROM [OS$], [Clientes$]" 'Nome das Planilhas da procura nome

sql = sql & "WHERE [OS$].[Statusservico] = [OS$].[Statusservico] "
sql = sql & "AND [OS$].[Cliente] = [Clientes$].[Codigo] "

'monta a cláusula WHERE
Call MontaClausulaWhere(txtCliente.Name, "[Clientes$].[Cliente]", sqlWhere)
Call MontaClausulaWhere(txtResumoServicos.Name, "[OS$].[ResumoServicos] ", sqlWhere)
 
Postado : 14/01/2021 11:35 am
NERI S
(@neri-s)
Posts: 0
Estimable Member
Topic starter
 

Esta abaixo no texto. Vou colocar aqui abaixo como texto :


sql = "SELECT [OS$].[Codigo] ,[OS$].[Statusservico],[Clientes$].[Cliente] "

sql = sql & "FROM [OS$], [Clientes$]" 'Nome das Planilhas da procura nome

sql = sql & "WHERE [OS$].[Statusservico] = [OS$].[Statusservico] "
sql = sql & "AND [OS$].[Cliente] = [Clientes$].[Codigo] "

'monta a cláusula WHERE
Call MontaClausulaWhere(txtCliente.Name, "[Clientes$].[Cliente]", sqlWhere)
Call MontaClausulaWhere(txtResumoServicos.Name, "[OS$].[ResumoServicos] ", sqlWhere)

 

 
Postado : 14/01/2021 1:41 pm
NERI S
(@neri-s)
Posts: 0
Estimable Member
Topic starter
 

O inicio está escrito PopulaListbox o que na verdade deveria ser PopulaListview.

 
Postado : 14/01/2021 3:10 pm
NERI S
(@neri-s)
Posts: 0
Estimable Member
Topic starter
 

Anderson, Quanto ao preenchimento eu estou conseguindo. O que eu me referi acima é pegar o código que está na Planilha OS (referente ao cliente) e ir na planilha Cliente e trazer o nome correto. 

Mas tranquilo, ainda não consegui. Mas vou procurar.

 

 
Postado : 14/01/2021 3:29 pm
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 

@neri-s não sei se compreendi e até onde me recordo a rotina PopulaListbox foi feita para popular um Listbox pelo menos acredito que as que postou são as que saõ utilizadas no modelo cadastro do Tomaz Vasques e eu cheguei a fazer as adaptações para ListView, se for isso, ou mesmo não sendo, dá uma olhada no link abaixo e tera as rotinas utilizadas em ListBox, veja se consegue refazer as alerações, lembrando que o ListBox é bem limitado qto as configurações.

 

http://www.tomasvasquez.com.br/blog/modelo-de-aplicativo-de-cadastro-em-vba-no-microsoft-excel/

 
Postado : 14/01/2021 4:13 pm
NERI S
(@neri-s)
Posts: 0
Estimable Member
Topic starter
 

@coutinho é do exemplo do Tomaz Vasques que eu adaptei para utilizar. Sempre utilizo Listview, porém tem um amigo que só usa 64bits na máquina e eu estou querendo ajudá-lo. Por este motivo que estou a procura. Já vou olhar o link postado acima.

Mas em resumo ele faz o seguinte: Quando tenho uma Ordem de Serviço, ao invés de salvar o cliente, eu salvo o código. Faço isto para que, se houver alterações no nome do cliente, os dados estejam corretos. 

Como salvo o código, ele deve pegar o código do cliente que está na OS e ir até a planilha "Cliente" e ver quem é o cliente de tal código, e retornar o nome. Só isto. Faço com o Listview, porém no Listbox eu não consegui. 

Gosto muito dos exemplos do Tomaz e por isto utilizo-os. São práticos e fáceis. 

Muito obrigado por me ajudar também.

 

 
Postado : 14/01/2021 4:24 pm
Mauro Coutinho
(@coutinho)
Posts: 95
Estimable Member
 
Postado por: @neri-s

@coutinho é do exemplo do Tomaz Vasques que eu adaptei para utilizar. Sempre utilizo Listview, porém tem um amigo que só usa 64bits na máquina e eu estou querendo ajudá-lo. Por este motivo que estou a procura. Já vou olhar o link postado acima.

Mas em resumo ele faz o seguinte: Quando tenho uma Ordem de Serviço, ao invés de salvar o cliente, eu salvo o código. Faço isto para que, se houver alterações no nome do cliente, os dados estejam corretos. 

Como salvo o código, ele deve pegar o código do cliente que está na OS e ir até a planilha "Cliente" e ver quem é o cliente de tal código, e retornar o nome. Só isto. Faço com o Listview, porém no Listbox eu não consegui. 

Gosto muito dos exemplos do Tomaz e por isto utilizo-os. São práticos e fáceis. 

Muito obrigado por me ajudar também.

 

Então Nery, se não me engano ja cheguei a responder algumas solicitações la no Forum do Tomaz, mas a questão é que não sei de qual versão você fez as alterações, veja que no Modelo V3 ainda é utilizado ListBox, na V 3.5 eu adaptei para ListView, e como o colega Anderson falou, as linhas que colocou não são as que preenchem o ListView, a não ser que tenha feito outros tipos de adaptação.

Na V3 para preecher o ListBox no formulário de pesquisa é feito a chamada a rotina :

Private Sub btnFiltrar_Click()
Call PopulaListBox(txtNomeEmpresa.Text, txtNomeContato.Text, txtEndereco.Text, txtTelefone.Text, txtRegiao.Text)
End Sub

E cortando as linhas só pra ilustrar, na PopulaListbox chamamos a Function PreencheRcordsert

Set rst = PreecheRecordSet(NomeEmpresa, NomeContato, Endereco, Telefone, Regiao)

e então a MontaClausulaWhere e depois voltamos para a PopulaListBox e preenchemos.

 

Ou seja, não tem como identificar só pelo que pediu e o que postou onde não está de acordo, e mais uma vez lembrando, que trocar ListView pelo Listbox as propriedades são bem diferentes e o ListBox é bem limitado.

O ideal seria anexar o seu modelo para com o tempo tentarmos analisar melhor.

 
Postado : 15/01/2021 9:19 am
NERI S
(@neri-s)
Posts: 0
Estimable Member
Topic starter
 

Eu já tinha desistido do assunto, mas ele tb pode ser útil para outras pessoas, e por isto anexo ele para tentar resolver.

O que a Listview em anexo faz:

- Se olhar o Contas a Receber, consta somente o número do cliente. O nome ele busco com base no código do mesmo, na planilha Clientes. 

- O que eu gostaria de fazer é: fazer a mesma coisa em Listbox.

Será que é possível? Acho que sim. Mas eu não sei fazer. Caso queiram fazer e disponibilizar, agradeço. Senão, não farei em Listbox e sim em Listview.

Como eu já postei acima, este exemplo eu baixei do Forum do Tomaz e sempre me foi muito útil. Até já mencionei  em outro post.

 

 
Postado : 18/01/2021 9:48 am
(@anderson)
Posts: 203
Reputable Member
 

@neri-s

Se quiser aprender, assista a este vídeo:

https://youtu.be/CTq_aV6XSwU

Fiz o anexo abaixo e funcionou.

Este post foi modificado 4 anos atrás 6 vezes por Anderson

Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.

 
Postado : 18/01/2021 4:03 pm