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á.
Postado : 19/02/2017 1:17 pm