Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 11336

Dúvida VBA - Pesquisa e Registo sem PROCV

$
0
0
Boa tarde a todos, Necessito da vossa ajuda. Estou a ter alguma dificuldade em conseguir pesquisar nas linhas de uma coluna informação passada de outro separador. A ideia é aproveitar a informação de um separador de Registo e passar os dados desse mesmo registo para a atualização em novas colunas de um separador de base de dados no Excel Na imagem o Separador Registo, onde o registo "2017-1" é a chave a pesquisar na BD. Os campos a azul, têm na fórmula o PROCV, onde estou a ir buscar à BD os campos preenchidos pelo Registo " 2017-1". A ideia é o utilizador neste separador colocar o registo a pesquisar (2017-1 / 2017-2, etc..) (aparecendo através do PROCV os campos a azul já registados BD) e preencher depois os campos a amarelo. A ideia agora é pegar nos valores das células correspondente à cor amarelo, ir ao separador BD, procurar na coluna C o registo "2017-1" e preencher na coluna G e H os novos campos preenchidos, desse mesmo registo colocado. Tenho já criado o Separador Registo: E dados já preenchidos no Separador BD, onde os campos a amarelo são os campos a serem preenchidos conforme registo colocado no separador registos.. Já desenvolvi o seguinte código e necessito de algum feedback sobre o mesmo, face a estar com erros.. Sub Sorriso1_Click() ' ' buscavalor Macro ' Application.ScreenUpdating = False Dim reg As String Dim nome As String Dim emm As String 'Variavel ultima linha com valores da Base de Dados Dim UltimaLinha As Integer 'Pega valor do registo "2017-#" reg = Range("B2").Value 'Pega valor preenchido pelo utilizador para passar para registo da BD nome = Range("B8").Value emm = Range("B9").Value 'Após colocação dos campos acima pelo utilizador ele passa para o Separador BD Sheets("BDA").Select 'Regista o número de Linhas já preenchidas da Base de Dados para diminuir as linhas de procura UltimaLinha = Range("C1048576").End(xlUp).Row + 1 Do Until ActiveCell = reg ActiveCell.Offset(1, 0).Select 'desce uma linha If ActiveCell = reg Then 'faz a análise lógica ActiveCell.Offset(0, 5).Select 'desloca para a coluna G ActiveCell.FormulaR1C1 = nome ActiveCell.Offset(0, 1).Select 'desloca para a coluna H ActiveCell.FormulaR1C1 = emm End If Loop End Sub 'Creio que em vez do ciclo Do Until, possa fazer através de um For Registo ou um ciclo IF... 'Do género: Ultimalinha = ActiveCell.Row + 1 'pega ultima linha preenchida 'Range("C" & Ultimalinha).Select 'coloca o curso na mesma For i = 1 To ultimalinha 'percursso o ciclo da primeira à ultima linha preenchida da coluna Registo "2017-1, até 2017-ultimo registo" Range("C" & i).Select If(Range"C" & i).Value = Reg 'Se encontrar registo 2017-1 na coluna C Range("G" & Reg).Value = nome 'Vai à coluna G dessa mesma linha e coloca o valor que deu ao nome no separador registo Range("H" & Reg).Value = emm 'Vai à coluna H dessa mesma linha e coloca o valor que deu ao emm no separador registo End If 'termina ciclo Next i 'termina ciclo 'Voltar para Separador Registo Sheets("Registos").Select 'Posiciona Cursor no B2, no do Registo Range("B2").Select Esta segunda parte talvez fosse mais direta, mas mesmo assim estou com dificuldade, estando a pensar se preciso do For e do IF. Cada Registo é único na coluna C, havendo sempre só um.. Até estava na ideia se o Registo colocado for por exemplo "2017-5" aparecer uma MsgBox dizendo "Registo não existe na BD" e se passar para lá com sucesso MsgBox "Registo 2017-X Atualizado" Alguém me pode dar umas dicas? Obrigado desde já.

Viewing all articles
Browse latest Browse all 11336

Trending Articles