Boa tarde, colegas.
Bem, enquanto estava analisando e preparando a resposta o Bernardo se adiantou e já matou o problema, então vou só complementar prá não perder o serviço.
O problema está em que, como vc não qualificou todos os intervalos, a origem dos dados virou um legítimo "balaio de gato".
Vamos analisar por exemplo a linha...
Cells(i, j) = WorksheetFunction.SumIf(Sheets("Info. Contratos").Range(Cells(6, 4), Cells(2000, 4)), Cells(i, 2), Sheets("Info. Contratos").Range(Cells(6, k), Cells(2000, k)))
Como vc relatou no início, vc está na planilha "Contratos", então ela é a planilha ativa, certo? Assim, todas as Cells e Ranges estarão se referindo a Contratos. Assim, nessa linha, as referências são:
Cells(i, j) -> Contratos
Cells(6, 4) -> Contratos (aqui é que está um dos erros, acredito, pois creio que vc quisesse se referir a Cells(6, 4) de "Info. Contratos", não é mesmo? Seria necessário qualificar Cells(6, 4) com o nome da planilha na frente, como fez o Bernardo)
Cells(2000, 4) -> Contratos (mesmo problema, teria que qualificar já que a planilha ativa é a Contratos. O Bernardo declarou uma variável para isso, o que facilita muito, senão vc teria que repetir Sheets("Info. Contratos").Cells(2000, 4))
Cells(i, 2) -> Contratos (aqui não sei se vc quis se referir a Contratos ou a Info. Contratos, suponho que esteja certo e seja Contratos mesmo)
Cells(6, k) -> Contratos (problema, idem)
Cells(2000, k) -> Contratos (problema, idem)
Portanto, caso vc não quisesse criar uma variável antes para qualificar os intervalos, teria que qualificar da forma mais trabalhosa, assim:
Cells(i, j) = WorksheetFunction.SumIf(Sheets("Info. Contratos").Range(Sheets("Info. Contratos").Cells(6, 4), Sheets("Info. Contratos").Cells(2000, 4)), Cells(i, 2), Sheets("Info. Contratos").Range(Cells(6, k), Sheets("Info. Contratos").Cells(2000, k)))
Mas é sempre vantagem usar a metodologia que o Bernardo usou, pois além do código ficar mais legível, menos susceptível ao erro e mais fácil de digitar, também minimiza o número de chamadas às referências dos objetos (contagem do número de pontos ".") o que torna o código mais rápido.
Postado : 08/04/2016 12:04 pm