Acionar Macro em uma formula.
É possível acionar macro através de formula.
Explicando a necessidade: Planilha enorme com milhares de PROCV e poucas resposta, a maioria das respostas é não encontrada, portanto ="" (branco).
Pensei se resposta não encontrada no lugar de colocar "" (branco) fosse acionada uma macro para limpar a célula. Os dados são fixos, só serão procurados uma vez, não haverá necessidade de recalculo.
Desta maneira respostas não úteis, as células serias limpas, eliminando a formula para aliviar o arquivo.
Boa tarde, poste uma planilha exemplo para melhor entendimento.
Ola @JULIO, estou tentando ajudar o @Aldo, como ele disse o arquivo tem todas as linhas do Calc (1048576). A formula teria esta lógica:
=Se($A2=B$1;$A2;"")
o problema é a quantidade de células em 256 colunas. Pois mesmo que a informação seja "" (branco) a fórmula fica carregada na planilha. O que havia pensado seria em caso negativo acionaria uma Macro ou Function para deletar a formula. Teoricamente iria copiando a formula em espaços menores e só ficaria as com informações úteis.@Gilberto Schiavinatto, o que é possível é criar uma função no Basic para ser usada na célula. O problema é que assim haveriam milhares de chamadas da macro/function e o desempenho ficaria comprometido. Então, acredito que o melhor é construir uma rotina, acionada por botão ou menu, que percorra as células e preencha as informações. Mas aí seria necessário ver um exemplo ilustrativo deste caso.
Outra possibilidade, a depender do que é preciso, é usar fórmulas matriciais. Nesta resposta@olivier dá um ótimo esclarecimento.
Ola @Grafeno, acabei chegando na sua dica, fiz uma rotina que trabalha em uma coluna por vez, no momento estou executando, mas tá um caroço +/- 5 min por coluna, e muda para a próxima sozinha e recomeça o processo.
@Gilberto Schiavinatto, são 256 colunas com 1048576 linhas? Desse jeito vai ficar pesado/lento mesmo. Um volume de dados muito grande, talvez fosse a hora de pensar migrar isso para um Banco de Dados.
Uma pergunta @Gilberto Schiavinatto , não seria melhor a macro simplesmente passar a informação em vez de criar o procedimento copiar e colar? por exemplo: oPlan.getCellRangeByName(col, lin).String = oPlan1.getCellRangeByName(col, lin).String (pode ser Value tbm)
Dessa forma elimina 02 operações na execução da macro
@Conrado, entendi sua colocação, mas fiz pelo gravador de Macro e este tipo de instrução não aparece.
Você teria um exemplo pratico de como usar, guardarei para futuro uso.
@Gilberto Schiavinatto , segue um arquivo que estou em fase final de aplicação (enviado ao seu e-mail). No módulo RNC contém as macros que estou falando. Caso sua tela abra em "tela cheia", clique no botão "manutenção". Enviado outro arquivo também para ver mais simples
Se o PROCV retende devolver um valor existente (ou não) numa massa de dados muito grande, eu investiria alguns minutos em avaliar funções de banco de dados tipo BDEXTRAIR(). Não testei.