Ir ao conteúdo
  • Cadastre-se
Adriano Delvali

Listview em arquivo de servidor

Recommended Posts

Boa tarde pessoal do Clube! Preciso de uma pequena ajuda num comando aqui.

 

tenho o código abaixo que faz referência/busca a uma sheet dentro do próprio arquivo.

 

estou tentando fazer a busca em um outro arquivo que fica no servidor, porém não esta dando certo.

alguém pode me ajudar?

 

código atual (funcionando)

Option Explicit
Private TextoDigitado As String
Private Sub ListBox1_Click()
    ActiveCell.Value = ListBox1.Value
    Unload Me
End Sub

Private Sub UserForm_Initialize()
    Call PreencheLista
End Sub
Private Sub PreencheLista()
    Dim ws As Worksheet
    Dim i As Integer
    Dim TextoCelula As String
    Set ws = ThisWorkbook.Worksheets(9)
    i = 1
    ListBox1.Clear
    With ws
        While .Cells(i, 8).Value <> Empty
            TextoCelula = .Cells(i, 8).Value
            If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
                ListBox1.AddItem .Cells(i, 8)
                
            End If
            i = i + 1
                   Wend
        
    End With
   
    

End Sub

 código que estou tentando ajustar:

 

Option Explicit

Private TextoDigitado As String


Private Sub ListBox1_Click()
    ActiveCell.Value = ListBox1.Value
    Unload Me
End Sub
Private Sub TextBox1_Change()
    TextoDigitado = TextBox1.Text
    Call PreencheLista
End Sub


Private Sub UserForm_Initialize()
    Call PreencheLista
End Sub


Private Sub PreencheLista()

 

Dim wb As Workbook: Set wb = ActiveWorkbook

Dim ws As Worksheet

Dim strTemplate As String: strTemplate = "Z:\BANCO_DADOS\DADOS.xls"

Set ws = wb.Sheets.Add(Type:=strTemplate)(9)


    i = 1
    ListBox1.Clear
    With ws
        While .Cells(i, 2).Value <> Empty
            TextoCelula = .Cells(i, 2).Value
            If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
                ListBox1.AddItem .Cells(i, 2)
            End If
            i = i + 1
        Wend
    End With
End Sub
 

 

 

 

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

O titulo do seu topico diz: "Listview em arquivo de servidor", mas no seu codigo voce esta usando o componente Listbox (??)

Bom se realmente for um Listbox eu fiz um exemplo utilizando o ADO para importar os dados de uma outra pasta de trabalho, em um ambiente de rede: 

Outra coisa, não endendi de onde vem o valor da string TextoDigitado (??)

* habilite a referencia microsoft activeX data objects library X.XX (vide img abaixo)

* Altere o nome da aba da pasta de trabalho DADOS.xls nas string SuaABA mantendo o $ 

 

references.jpg

fonte: ExcelADO mostra como usar o ADO ...

	Private Sub PreencheLista()
    Dim cn As ADODB.Connection, rs As ADODB.Recordset, r As Long, sql As String
    Dim TextoCelula As String
    
    Const strPath = "Z:\BANCO_DADOS\DADOS.xls"
    Const SuaABA As String = "Nome_da_aba_da_Planilha_DADOS$A1:H"
    
    On Error GoTo Erro
    
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
            "Data Source=" & strPath & ";" & _
            "Extended Properties=""Excel 8.0;"""
	    sql = "SELECT * FROM [" & SuaABA & "];"
	    Set rs = New ADODB.Recordset
    rs.Open sql, cn, adOpenKeyset, adLockOptimistic
    rs.MoveFirst
	   
    ListBox1.Clear
    With rs
        While rs.EOF = False
            TextoCelula = rs.Fields(7) 'Coluna 8
             If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
            ListBox1.AddItem rs.Fields(7) 'Coluna 8           
             End If
              rs.MoveNext
        Wend
	    End With
    
    Set rs = Nothing
  If cn.State = 1 Then cn.Close
Exit Sub
	Erro: MsgBox Err.Number & " " & Err.Description
Set rs = Nothing
 If cn.State = 1 Then cn.Close
	End Sub
Editado por Basole

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole,Primeiramente obrigado pela disposição em sempre ajudar! Sou grato por isso.

 

você está correto, é um listbox. Sou muito leigo no assunto. consigo apenas fazer algumas coisas e adaptações para uso.

 

Tentei utilizar o código que você passou, mas me retornou um erro. Pode ser que tenha feito algo errado.

 

Não sei se expliquei minha necessidade corretamente, mas para você ver minha aplicação, anexei uma planilha com o código que uso.

 

Hoje funciona bem, mas a ideia é como falei inicialmente, ter um arquivo no servidor com os dados que serão carregados quando o usuário clicar em determinada célula.

 

Obrigado mais uma vez!

 

 

 

EXEMPLO LISTBOX.xls

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole Funcionou perfeitamente, só fiz um ajuste na ordem de busca da planilha conforme o código. Mas ficou Show.

 

Obrigado novamente! 

 With rs
        While rs.EOF = False
            TextoCelula = rs.Fields(1) 'Coluna 1 - ordem da aba na planilha
             If UCase(Left(TextoCelula, Len(TextoDigitado))) = UCase(TextoDigitado) Then
            ListBox1.AddItem rs.Fields(1) 'Coluna 1 - ordem da aba na planilha          
             End If
              rs.MoveNext
        Wend
	    End With

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@basole, só um ajuste que não estou conseguindo achar.

 

eu adaptei o código para algumas abas.  

Para as que tem poucas linhas preenchidas dá um erro e depois abre o listbox.

 

o erro é o seguinte:

 

94 Uso de Null inválido

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Citação

TextoCelula = rs.Fields(1) 'Coluna 1 - ordem da aba na planilha

 

@Adriano Delvali com recordset, a coluna inicial, é 0 (zero), neste caso voce esta importando a 2ª coluna, a (B), da planilha.

 

Mais enfim, voce não quer que fique uma linha 'em branco' no seu listbox, então acrescentei + uma condição <> de vazio.

 

Substitue este trecho do codigo:

 

        While rs.EOF = False
            TextoCelula = VBA.IIf(IsNull(rs.Fields(1)), "", rs.Fields(1)) 'Coluna 2
            If TextoCelula <> "" And VBA.UCase(Left(TextoCelula, VBA.Len(TextoDigitado))) = VBA.UCase(TextoDigitado) Then
                ListBox1.AddItem rs.Fields(1) 'Coluna 2
            End If
            rs.MoveNext
        Wend

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole bom dia,

 

Só uma pergunta, mas nada que irei fazer no momento.

 

Essa rotina era possível com um banco no access? hoje já tenho uma conexão com o banco access, pois todo os resultados que são gerados no preenchimento dessa planilha são enviados para o banco.

 

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim e possivel, com esse mesmo codigo. 

So necessita de alguns ajustes, para conectar o bd aceess

 

Poste exemplos dos seus arquivos excel e access, com alguns dados ficticios, para facilitar a ajuda..

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole eu estou precisando fazer as duas rotinas que estou fazendo atualmente com o banco excel

 

1ª - hoje eu digito o código de um determinado item em uma célula (B3) e na outra célula carrega a descrição (C3) (PROCV). Eu queria fazer isso na minha planilha sem utilizar um useform (digitar o código em uma célula, ele fazer um procv no banco access e carregar na outra célula a descrição.  

2ª Adaptar o código que você me fez pra mim no inicio do tópico para a busca ser no banco access (atualmente ele faz no banco excel)

 

 

 

Editado por Adriano Delvali
.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Adriano Delvali

voce precisa compactar este seu banco, esta com 2 MB e com poucos dados

 

2ª Adaptar o código que você me fez pra mim no inicio do tópico para a busca ser no banco access (atualmente ele faz no banco excel)

Esta 2 ª duvida eu nao entendi se voce quer filtrar os dados ou trazer todos da tabela Fornecedores, e depois que trazer, aonde quer inserir esses dados?

 

 

 

Laudo de Análise - Garantia da Qualidade.TESTE_2.xls

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole Estava ausente, por isso não consegui responder na terça.

 

Olha, ficou perfeita a busca no banco, era exatamente isso. só acertei o range, pois no laudo somente 1 célula ira aceitar o dado buscado ("B3"). mas ficou show.

 

Em relação a 2ª dúvida: para cada item que eu busco existe um fornecedor. porém nesse caso não tenho os códigos deles, por isso preciso buscar em um listbox pelo nome.

 

a ideia era clicar em uma determinada célula e abrir um listbox com todos os fornecedores e eu selecionar um deles e o resultado preencher uma célula (no exemplo seria a "D3"). você ja fez isso para mim, porém abrindo o listbox de um banco excel, o que preciso é modificar para o listbox vir do access.

 

conseguiu entender?

 

 

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Adriano Delvali fiz as alteraçoes que solicitou.

 

Com a funçao "Busca_Dados_Access" voce pode usa-la como um formula do excel, e  em qualquer coluna.

Veja este exempo:

Codigo do produto; nome da tabela

=Busca_Dados_Access(900;"insumos")

Não esqueça de compactar seu banco: 

030515_0706_DicarpidaCo1.png

Laudo de Análise - Garantia da Qualidade.TESTE_3.xls

Editado por Basole

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Basole eu estava finalizando a montagem do arquivo. e tem um campo onde eu carrego dados através do listbox. (tabela parâmetros do bd). minha ideia era usar o busca access para que toda vez que um campo fosse carregado com um parâmetro, a unidade de medida fosse carregada na coluna posterior. 

 

 

bd_Garantia_Qualidade.rar

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Adriano Delvali Desculpe, mas nao entendi exatamente o que quer fazer. 

 

Eu alterei a função (udf), para poder inserir + paramentros:

 

Busca_Dados_Access("O_QUE_ESTA_ PROCURANDO";"NOME_TABELA";"CAMPO_PROCURA";CAMPO_RETORNA)

 

Exemplo:

 

=Busca_Dados_Access("5249";"Bonsucesso";"Análise";0)

 

Laudo de Análise - Garantia da Qualidade.TESTE_4.xls

Editado por Basole

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×