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.
