Colegas, boa tarde.
Tenho a rotina abaixo, que busca a existência de documentos, usando como base os dados da coluna "A", que são meses e anos e na coluna "B", coloca um "SIM", se o documento existe.
Preciso que na coluna "C" seja colocado o valor correspondente ao primeiro código de pagamentos, que pode ser "0002" ou "0015", sendo a posição desse valor diferente em cada código, conforme ressaltado nas cores, nos documentos.
Até a primeira parte, funciona bem, mas estou com dificuldades para encontrar a saída para a segunda, com os valores.
Peço ajuda aos colegas mais experientes deste Fórum.
Agradeço toda a colaboração. Obrigado.
Public Sub BuscaValor() Dim InStr As String Dim codigos, textos, i, Texto As Variant codigos = ActiveSheet.Range("A2:A" & ActiveSheet.Range("A1000000").End(xlUp).Row) textos = ActiveSheet.Range("D2:D" & ActiveSheet.Range("D1000000").End(xlUp).Row) For i = LBound(codigos) To UBound(codigos) For Each Texto In textos If InStr(Texto, codigos(i, 1)) > 0 Then ActiveSheet.Cells(i + 1, "B") = "SIM" '?????????????? 'ActiveSheet.Cells(i + 1, "C") = Trim$(Mid$(Texto, 57, 12)) 'Se código COD.V/D = 0002 'ActiveSheet.Cells(i + 1, "C") = Trim$(Mid$(Texto, 85, 12)) 'Se código COD.V/D = 0015 Exit For End If Next Next End Sub
Colegas,
Ainda estou buscando solução para minha planilha.
Consegui fazer uma rotina que coloca o valor, mas apenas na linha do primeiro código encontrado, pois o número de linhas entre os demais é variável.
Estou tentando fazer a busca com a função "Find", num laço with/endwith, mas estou recebendo mensagem de que a variável do objeto ou a variável do bloco não foi definida, mas não encontro onde está o erro.
Segue minha rotina, pedindo para que algum dos colegas mais experientes me oriente...
Agradeço qualquer colaboração. Obrigado.
PS: A planilha utilizada é a mesma anexada acima.
Public Sub BuscaValor() Dim InStr As String Dim codigos, textos, i, Texto As Variant Dim vCod, TxtVal As String Dim Lin As Integer Dim lrw As Range Dim Wb As Workbook Dim Ws As Worksheet codigos = ActiveSheet.Range("A2:A" & ActiveSheet.Range("A1000000").End(xlUp).Row) textos = ActiveSheet.Range("D2:D" & ActiveSheet.Range("D1000000").End(xlUp).Row) vCod = "00020015" Set Wb = ThisWorkbook Set Ws = Worksheets("Planilha1") For i = LBound(codigos) To UBound(codigos) For Each Texto In textos If InStr(Texto, codigos(i, 1)) > 0 Then ActiveSheet.Cells(i + 1, "B") = "SIM" With Ws lrw = .Range("D:D").Find(What:=vCod, _ After:=.Range("D1"), _ LookAt:=xlPart, _ LookIn:=xlValues, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious).Row End With TxtVal = Cells(lrw, "D").Value vCod = Left(TxtVal, 4) If vCod = "0002" Then ActiveSheet.Cells(i + 1, "C") = Trim$(Mid$(TxtVal, 57, 12)) 'Se código COD.V/D = 0002 Else: vCod = "0015" ActiveSheet.Cells(i + 1, "C") = Trim$(Mid$(TxtVal, 85, 12)) 'Se código COD.V/D = 0015 End If Exit For End If Next Next End Sub
Boa tarde, Bautto.
Também tentei fazer com .Find(), mas encontrava o mesmo problema da linha entre os valores serem variáveis.
No entanto, acredito que se usassemos .Find() a partir da linha do documento encontrado dará certo. Até conseguia o número "0002", porém era "0002" dos primeiros documentos independente se existia no Banco de dados ou não.
Boa noite Bautto.
Segue planilha, confesso que deu um trabalhinho kkk
Apesar de não ter usado Array para melhor desempenho da macro(sou péssimo com Arrays), acredito que funciona da forma solicitada.
Caro kev027, boa tarde.
Meu amigo, deixe de ser modesto... estou vendo que deu um trabalhão!!!
Como disse, procurei usar a função "Find", mas só cheguei no meio do caminho... você mostrou o resto da estrada.
Agradeço imensamente sua colaboração. Muito obrigado mesmo!!