Ir ao conteúdo
  • Cadastre-se

VBA funcão buscarDataRecente


pedrovgp

Posts recomendados

Sei onde está o problema mas não consigo resolvê-lo:

Public Function buscarDataRecente(codigo, colCodigo, colDatas)

'''Essa é uma funcao basica com intuito de buscar a data mais recente num rangeDatas associadas ao codigo dado

Dim rRangeDatas As Range

Dim rRangeCodigos As Range

Dim rRangeDatasSel As Range

buscarDataRecente = -80 'Valor para controle apenas

contador = 1

'''Set a range variable to all data in selected colCodigo e colDatas

Set rRangeDatas = Range(colDatas.Cells(2, 1), colDatas.Cells(1048576, 1).End(xlUp))

Set rRangeCodigos = Range(colCodigo.Cells(2, 1), colCodigo.Cells(1048576, 1).End(xlUp))

num_linhas = rRangeDatas.Cells.Count

'''Laco para criar o vetor só com datas referentes ao código dado

''' É AQUI QUE ESTÁ O PROBLEMA, EU NÃO CONSIGO ASSOCIAR O VALOR DE rRangeDatas à rRangeDatasSel, NÃO SEI PORQUE.

For i = 1 To num_linhas

If rRangeCodigos(i, 1).Value = codigo Then

rRangeDatasSel(contador, 1).Value = rRangeDatas(i, 1).Value

contador = contador + 1

End If

Next i

buscarDataRecente = Application.WorksheetFunction.Max(rRangeDatasSel)

'''A FUNÇÃO CONTINUA RETORNANDO -80, QUANDO ERA PARA RETORNAR 06/06/2010, A ÚNICA DATA NO VETOR rRangeDatas CUJO CÓDIGO É = codigo

End Function

Link para o comentário
Compartilhar em outros sites

Olá pedrovgp

Desculpe, mas não consegui entender o código. você poderia explicar qual o objetivo da função?

Oi Márcio,

Eu consegui resolver o problema, mas usando um Array. Minha dúvida sobre como usar um Range continua, na realidade.

A função deve buscar o código (codigo) dado numa coluna (colCodigo). Para cada código encontrado nessa coluna há uma data associada na coluna de datas (colDatas). Das datas associadas apenas ao código dado (pois há nessa coluna também datas associadas a outros códigos), a função deve retornar a mais recente.

Mas a minha dúvida que resta é porque esse trecho do código não funciona:

For i = 1 To num_linhas

If rRangeCodigos(i, 1).Value = codigo Then

rRangeDatasSel(contador, 1).Value = rRangeDatas(i, 1).Value

contador = contador + 1

End If

Next i

Eu conferi que a comparação é feita, ele entra no laço, mas não atribue valor nenhum a rRangeDatasSel(contador,1).

Eu creio que estou usando essa variável Range de maneira errada, mas não sei usar corretamente. Essa variável rRangeDatasSel eu declarei dentro do procedimento. Minha intenção é que ela armazenasse apenas as datas associadas ao código dado, para depois usar a função Application.WorsheetFunktion.Max(rRangeDatasSel) e conseguir selecionar a data mais recente.

O que fiz no fim foi substitui-lo (esse Range) por um Array. Funcionou. Mas agradeceria se você me tirasse essa dúvida, de como atribuir um valor a uma posição de um Range que criei dentro do próprio procedimento. Eu imaginei que Ranges fossem como vetores. Tenho obrigatoriamente que associar um Range à um Range de alguma planilha?

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...