Página 1 de 1

ERRO "1004" - Não é possível obter a propriedade Index da classe Worksheetfunction

Enviado: 18 Mai 2021 às 17:44
por vitordmd
Estou iniciando no VBA e gerei um código com as funções de soma e índice corresp, a função está sendo utilizada dentro de um "While" com outras condições que rodam tranquilamente, inclusive o código abaixo, porém quando ele chega linha em que encontra o valor procurado ele da erro (ERRO "1004" - Não é possível obter a propriedade Index da classe Worksheetfunction), a linha 9 é uma variável continua de 1 em 1. Como disse, sou novo aqui e no desenvolvimento de VBA, porém tentei ser o mais esclarecedor possível.

Abaixo o código que apresenta o erro:

cells(1,1) = WorksheetFunction.Sum(WorksheetFunction.Index(Range(Cells(11, 1), Cells(500, 20)), WorksheetFunction.Match(Cells(Linha9, 22), Range(Cells(11, 1), Cells(500, 1)), 0), 1, 2), 75)

Re: ERRO "1004" - Não é possível obter a propriedade Index da classe Worksheetfunction

Enviado: 18 Mai 2021 às 18:47
por osvaldomp
Sugestão: disponibilize diretamente aqui no fórum uma amostra do seu arquivo Excel com alguns dados e com o código completo instalado.

Ajudaria também para entender o problema se você disponibilizar a fórmula de planilha que equivale a essa linha que está apresentando erro, algo como =SOMA(ÍNDICE(... CORRESP(... que funcione na planilha e que apresente o resultado desejado.

Re: ERRO "1004" - Não é possível obter a propriedade Index da classe Worksheetfunction

Enviado: 18 Mai 2021 às 21:36
por vitordmd
Coloquei um arquivo de teste em que foi feito o mesmo raciocínio e apresentou o mesmo erro, inicialmente no meu modelo que estou trabalhando pensei que fosse por questões de alguma variável incompatível mas como no arquivo teste não tenho variável descarto esta possibilidade.


DADOS A DADOS B DADOS C
1 4 7
2 5 8
3 6 9


VALOR PROCURADO = 1

FÓRMULA EXCEL = ÍNDICE(A2:C4;CORRESP(1;A2:A4;0)*1;3) > NESTE CASO DEVERIA ME RETORNAR O VALOR 7 DA COLUNA C

FUNÇÃO VBA =
Cells(1, 10) = WorksheetFunction.Index(Range("A3", "C5"), WorksheetFunction.Match(1, Range("A3", "A5"), 0), 1, 3)

Re: ERRO "1004" - Não é possível obter a propriedade Index da classe Worksheetfunction

Enviado: 18 Mai 2021 às 23:46
por osvaldomp
substitua esta linha
Cells(1, 10) = WorksheetFunction.Index(Range("A2", "C4"), WorksheetFunction.Match(Cells(1, 5), Range("A2", "A4"), 0), 1, 3)

por esta
Cells(1, 10) = WorksheetFunction.Index(Range("A3", "C5"), WorksheetFunction.Match(Cells(2, 5), Range("A3", "A5"), 0), 3)

Re: ERRO "1004" - Não é possível obter a propriedade Index da classe Worksheetfunction

Enviado: 19 Mai 2021 às 10:52
por vitordmd
Desta forma ele funciona, porém, quando coloco o argumento de linha qual linha deve me retornar ele dá o mesmo erro, teria que inserir essa condição de alguma forma especifica?

Cells(1, 10) = WorksheetFunction.Index(Range("A3", "C5"), WorksheetFunction.Match(Cells(2, 5), Range("A3", "A5"), 0),2, 3)

Re: ERRO "1004" - Não é possível obter a propriedade Index da classe Worksheetfunction

Enviado: 19 Mai 2021 às 13:28
por osvaldomp
vitordmd escreveu: 19 Mai 2021 às 10:52 ... quando coloco o argumento de linha ...
O argumento linha já é retornado pela função Match e o argumento coluna é retornado pelo número 3 ao final da expressão.
Se você introduz mais um argumento, o que é errado, então a expressão retorna erro (por excesso de argumentos) ;)

Re: ERRO "1004" - Não é possível obter a propriedade Index da classe Worksheetfunction

Enviado: 19 Mai 2021 às 14:51
por vitordmd
Obrigado, a ideia era retornar alguns valores de acordo com a linha indicada, resolvi conforme exemplo abaixo

Cells(1, 10) = WorksheetFunction.Index(Range("A3", "C5"), WorksheetFunction.Match(Cells(2, 5), Range("A3", "A5"), 0), +n,3)

O "+n" indica a linha que me deve retornar quando tenho mais de um resultado para o valor procurado.

Abraço.

Re: ERRO "1004" - Não é possível obter a propriedade Index da classe Worksheetfunction

Enviado: 19 Mai 2021 às 21:46
por osvaldomp
Esta expressão ~~~> Range("A3", "A5"), 0), +n,3) funcionou aí ? Se funcionou foi com ajuda do além.

A posição correta de +n é esta (sem vírgula antes) ~~~> Range("A3", "A5"), 0) + n, 3)

Ainda, em lugar de adicionar"n" ao valor de E2 altere diretamente E2. ;)