Pergunte aqui
0

Acionar Macro em uma formula.

perguntadas 2018-09-18 15:29:34 +0200

updated 2019-03-01 18:16:06 +0200

É 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.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

Boa tarde, poste uma planilha exemplo para melhor entendimento.

imagem do gravatar de Júnio VieiraJúnio Vieira ( 2018-09-18 21:09:18 +0200 )editar

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.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-09-18 22:42:30 +0200 )editar

@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.

imagem do gravatar de GrafenoGrafeno ( 2018-09-20 02:56:53 +0200 )editar

Outra possibilidade, a depender do que é preciso, é usar fórmulas matriciais. Nesta resposta@olivier dá um ótimo esclarecimento.

imagem do gravatar de GrafenoGrafeno ( 2018-09-20 03:05:38 +0200 )editar

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.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-09-20 03:27:38 +0200 )editar

@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.

imagem do gravatar de GrafenoGrafeno ( 2018-09-22 18:48:18 +0200 )editar

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

imagem do gravatar de ConradoConrado ( 2018-09-25 17:37:01 +0200 )editar

@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.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-09-25 21:19:23 +0200 )editar

@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

imagem do gravatar de ConradoConrado ( 2018-09-28 13:02:00 +0200 )editar

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.

imagem do gravatar de OlivierOlivier ( 2018-10-11 00:01:18 +0200 )editar

1 Resposta

1

respondidas 2019-03-24 04:35:08 +0200

@Júnio Vieira, @Grafeno, @Conrado, @Olivier

Encontrei uma alternativa, a saída é criar uma Function, que tenha em sua execução as células desejadas para acionar a Macro.

A Function abaixo:

Function XPTO( a, b )
XPTO = a * b
    Call MacroExecutar
End Function

Quando for efetuada alteração nas células envolvida, gera uma execução na function e por sua vez aciona a MacroExecutar.

A célula com a Function pode ficar em qualquer lugar da planilha, não é necessária ter informação útil para a planilha.

Exemplo: em uma célula qualquer coloco a function =XPTO(C4;F7), então quando uma das células C4 ou F7 sofrer alteração a MacroExecutar será acionada.

editar assinalar como ofensivo Excluir Link mais

Comentários

Olá @Gilberto Schiavinatto

Ótima ideia, porém, isso é mais ou menos o que o @Grafeno falou sobre ter uma chamada através de botão ou menu para uma rotina que percorra os dados.

imagem do gravatar de ConradoConrado ( 2019-03-25 11:49:25 +0200 )editar

@Conrado, sim sugestão do @Grafeno, só quis documentar uma maneira de usar, sabendo-se que se for milhares, vai ter problema. É que cai nesta situação, e é pontual, então fica pratico.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2019-03-25 12:51:58 +0200 )editar

@Gilberto Schiavinatto .... realmente, muitos dados fica inviável a utilização do Cal e do Excel tbm...estou tenho este problema em um arquivo de um cliente que já está próximo dos 10M com mais de 350 abas. Estou migrando para access (base) por enquanto.

imagem do gravatar de ConradoConrado ( 2019-03-25 17:19:43 +0200 )editar

Ola @Conrado, não sei como esta estruturado seu arquivo, mas já vi diversos casos que o usuário cria dezenas de abas individual por clientes, com inúmeras informações repetitivas, a solução que indico é criar una só onde escolhesse o Cliente e a aba traz todos os dados/movimentações do cliente.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2019-04-05 15:08:04 +0200 )editar

@Gilberto Schiavinatto Cada aba é um item diferente. Neste arquivo é um controle de equipamentos onde contém dados do equipamentos e resultados obtidos. Cada equipamento é diferente um do outro.

imagem do gravatar de ConradoConrado ( 2019-04-05 22:08:59 +0200 )editar

Ok @Conrado, sucesso.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2019-04-05 22:51:09 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2018-09-18 15:29:34 +0200

Lidas: 63 vezes

Última atualização: Mar 24