Pesquisa e Inserção...
 
Notifications
Clear all

Pesquisa e Inserção de dados em outro Workbook

19 Posts
2 Usuários
0 Reactions
3,053 Visualizações
(@macabruz)
Posts: 52
Trusted Member
Topic starter
 

Pessoal, bom dia!

Estou tentando fazer 2 coisas, mas encontrei uma certa dificuldade e conto com vocês pra me ajudar!
Estou com um arquivo que tem 1 Form a ser preenchido e depois que tudo é preenchido, clico em OK e as informações são salvas em uma sheet (Banco_de_Dados).
Dentro desse form, existe uma combobox que busca os clientes em uma outra sheet (Clientes).
Até aqui está tudo certo, tudo funcionando lindo! No entanto, pediram para que eu separe as informações em Workbooks diferentes, ou seja, um Workbook para Clientes, um para Banco de Dados e outra para o Form.

Já copiei a sheet de clientes e joguei em outro workbook, que está no mesmo diretório do workbook do Form. Fiz um teste e eu consigo, através de um botão, abrir o workbook Clientes.
O que eu preciso fazer é, dentro da programação do Combobox que busca os clientes, ele ir até esse outro workbook e pegar as informações lá! Mas, até onde eu sei, eu tenho que configurar a propriedade RowSource..que hoje está como "Clientes!A2:A100". Como eu posso colocar o endereço da outra workbook ai dentro??

Também, eu gostaria de trabalhar com os workbooks de fonte de dados e destino de dados em background...ou seja..o workbook Clientes e o Banco de Dados..ele serão utilizados pelo workbook do Form, mas sem serem vistos...
Tentei abrir ele e em seguida alterar a propriedade visible..mas ele dá um erro...Como posso fazer isso??

Workbooks.Open Filename:="C:UsersJorgeDesktopProjeto ExcelDB_Clientes.xlsm"
    Workbooks("DB_Clientes").Visible = -2

No aguardo! Se for necessário posso postar o projeto, mas acho que isso deve ser bem simples pra vocês!

 
Postado : 17/10/2012 8:14 am
(@macabruz)
Posts: 52
Trusted Member
Topic starter
 

Não Alexandre, eu já alterei isso, mas não funciona.

Seguem os detalhes encontrados...

1º Quando tento buscar o e-mail digitando o nome do contato, ele apresenta erro.
2º Quando registro a primeira entrada, funciona. Então todos os textbox são limpos e começo uma nova digitação...ai clico em registrar novamente e ele avisa que o arquivo DB_Relatórios já está aberto....se eu clico sim ele apaga a alteração anterior..se eu clico não ele da erro.
3º Quando tento gerar o relatório, no botão Gerar...ou ele está dando erro na hora de abrir a janela de impressão...ou dá erro pois o workbook ativo não é o workbook do formulário...

To tentando arrumar aqui..mas trabalhando com 3 arquivos eu to apanhando d+++...parece que nada funciona!!!!

Por fim, tem mais uma coisa que se tiver como arrumar ajuda pra caramba!!
O diretório dos arquivos está como C:...Jorge...
Não tem jeito de programar para ele procurar o arquivo dentro do mesmo diretório que o arquivo Formulário está? Assim não importa o diretório que ele estiver..ele sempre vai abrir só o arquivo que está no mesmo folder...

Valeu mesmo a força Alexandre....você está ajudando pra cabamba! Espero conseguir algo me virando aqui..mas conto com sua ajuda!

Att,
Jorge.

 
Postado : 18/10/2012 7:17 pm
(@macabruz)
Posts: 52
Trusted Member
Topic starter
 

Esqueci de anexar...segue o anexo agora..

 
Postado : 18/10/2012 7:23 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Quanto a questão da impressão aqui funcionou sem problemas;....

Alterei os seguintes trechos:

Private Sub Text_Contato_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    With Workbooks("DB_Clientes.xlsm")
        .Sheets("Busca").Range("B4").Value = Text_Contato
        Relatório_Comercial.Text_Mail.Text = .Sheets("Busca").Range("C4").Text  'Faltou um ponto antes de .Sheets("Busca"), pois a abaestá no Workbooks("DB_Clientes.xlsm")
    End With
End Sub

Alterado e acrescetado os procedimentos.....

Private Sub UserForm_Activate()
    VerificaDB_ClientesAberto
'
'    On Error GoTo Abrir
'    Windows("DB_Clientes.xlsm").Visible = False               'Coloca o arquivo como oculto, se der erro é porque o arquivo não está aberto.
'    Exit Sub
'Abrir:                                                        'Se der o erro, abre o arquivo e o coloca oculto
'    Debug.Print ThisWorkbook.Path
'    ChDir ThisWorkbook.Path
'    Workbooks.Open Filename:="DB_Clientes.xlsm"
'    Windows("DB_Clientes.xlsm").Visible = False
'    ComboBox_Cliente.RowSource = ComboBox_Cliente.RowSource   'Atualiza conforme a fonte de dados
End Sub

Private Sub VerificaDB_ClientesAberto()
    Dim I As Integer
    Dim Aberto As Boolean
    
    Aberto = False
    For I = 1 To Workbooks.Count
        If Workbooks(I).Name = "DB_Clientes.xlsm" Then
            Aberto = True
            Exit For
        End If
    Next
    
    If Not Aberto Then
        ChDir ThisWorkbook.Path
        Workbooks.Open Filename:="DB_Clientes.xlsm"
        Windows("DB_Clientes.xlsm").Visible = False
        ComboBox_Cliente.RowSource = ComboBox_Cliente.RowSource   'Atualiza conforme a fonte de dados
    End If
End Sub

Private Sub VerificaDB_RelatoriosAberto()
    Dim I As Integer
    Dim Aberto As Boolean
    
    Aberto = False
    For I = 1 To Workbooks.Count
        If Workbooks(I).Name = "DB_Relatórios.xlsx" Then
            Aberto = True
            Exit For
        End If
    Next
    
    If Not Aberto Then
        ChDir ThisWorkbook.Path
        Workbooks.Open Filename:="DB_Relatórios.xlsx"
    End If
End Sub

O arquivo de DB_Relatórios será fechado após registrar... O DB_Clientes só será fechado durante o fechamento do Formulário...
Para que o DB_Clientes é verificado se está aberto? Tem necessidade
Verifica se a última linha é realmente necessária.... ComboBox_Cliente.RowSource = ComboBox_Cliente.RowSource

Private Sub CommandButton_Registrar_Click()
'    On Error GoTo Abrir
'    Windows("DB_Clientes.xlsm").Visible = False
'Abrir:
'    Workbooks.Open Filename:="C:UsersJorgeDesktopProjeto ExcelDB_Clientes.xlsm"
'    Windows("DB_Clientes.xlsm").Visible = False
    
    VerificaDB_ClientesAberto
    VerificaDB_RelatoriosAberto
    
    'Se não estiver preenchido o nome do cliente, sai da rotina sem gravar nada.
    If ComboBox_Cliente.Text = "" Then Exit Sub
    
    Dim Lin As Long
'    Workbooks.Open Filename:="C:UsersJorgeDesktopProjeto ExcelDB_Relatórios.xlsx"
    Windows("DB_Relatórios.xlsx").Visible = True

'###
'Sem alterações até o trecho abaixo:
'###

    Call Clear
    Relatório_Comercial.TextBox_Data = Format(Date, " dd / mm / yyyy")
    Me.Text_Técnico.SetFocus
    End With
    'Workbooks("DB_Clientes.xlsm").Close SAVECHANGES:=True
    Workbooks("DB_Relatórios.xlsx").Close SAVECHANGES:=True
    ComboBox_Cliente.RowSource = ComboBox_Cliente.RowSource   'Atualiza conforme a fonte de dados
End Sub


Private Sub CommandButton_Gerar_Click()
    ThisWorkbook.Activate
    Sheets("Relatório_Visitas").Range("J3").Value = Format(TextBox_Data, "dd/mm/yy")
 
Postado : 19/10/2012 7:01 am
(@macabruz)
Posts: 52
Trusted Member
Topic starter
 

Alexandre,

Primeiramente, um Feedback sobre o que você passou:

1 - De fato a questão de impressão voltou a funcionar dps que reiniciei o computador...não alterei nada...

2 - Com relação aos códigos que você passou...
1º Código: Eu que vacilei! Faltou o procv na célula C4..acho que deletei acidentalmente e não vi...

Do mais, tudo funcionando agora!!! Falta acertar um detalhe ou 2...umas contas automáticas..mas isso acho que dou conta de achar o bug! rs

Obrigado brother!! Seu joinha ta ai!

t+

 
Postado : 20/10/2012 6:52 pm
Página 2 / 2