sexta-feira, 12 de agosto de 2016

Excel VBA: E quando não conseguimos desligar o cálculo automático? Como fazer?

Quando precisamos de performance em processamento de grandes massas de dados no Excel, principalmente quando este processamento vai escrevendo ao longo de nossas planilhas, habitualmente desligamos algumas funcionalidades, tais como a atualização da tela, interceptação de eventos e, ainda mais eficiente, alteramos o processo de cálculo de automático para manual. Porém, em uma situação muito particular, esse último passo não funciona: quando temos câmeras ativas no Excel. E aí? Como resolver este problema?


Métodos de Cálculo

O Excel possui dois métodos principais de cálculo: Automático e Manual. Este primeiro, padrão e mais utilizado, provoca um recálculo de toda a pasta de trabalho sempre que algo é alterado. O segundo, acata toda e qualquer alteração e, quando ordenado (tecla F9), efetua de uma única vez o cálculo. Este segundo é muito útil em caso de planilhas maiores, com milhares de fórmulas. Dependendo do tamanho das planilhas, torna-se impraticável manter o recálculo em automático.

A alteração, via menus, da modalidade de cálculo se dá sa seguinte maneira:

Menu FÓRMULAS, em seguida OPÇÕES DE CÁLCULO:



Ao final, escolhemos AUTOMÁTICO ou MANUAL.


Lembrando que, quando estamos trabalhando com cálculo manual, o recálculo ocorre ao pressionarmos a tecla F9.

A alteração do método de cálculo, via VBA, é através da instrução abaixo:
Application.Calculation = xlCalculationManual

Para restabelecermos o recálculo Automático utilizamos a seguinte instrução:
Application.Calculation = xlCalculationAutomatic


Mas, e quando solicitamos que o recálculo passe para manual e o Excel "não obedece"? 

Quando temos, em nossa pasta de trabalho, pelo menos uma câmera ativa, o Excel simplesmente ignora a instrução para não recalcular e efetua a operação, com o objetivo de atualizar a câmera. 

Abaixo, ilustramos nosso modelo:



Podemos notar acima que temos uma imagem à direita, exibida por uma câmera apontada para a região "B6:C12", conforme destacamos em AMARELO.

Isso significa que toda e qualquer alteração na pasta de trabalho provocará um recálculo para atualizar a câmera, independentemente da modalidade de cálculo escolhida. Para desligarmos a câmera, devemos remover o apontamento, ou seja, a fórmula por detrás da câmera.

Abaixo, temos o ódigo que desliga a nossa câmera, aqui denominada "PICTURE 3":

Sub DesligarCamera()
    Sheets("Camera").Shapes.Range(Array("Picture 3")).Select
    Selection.Formula = ""
End Sub

Notemos, abaixo, que a FÓRMULA da câmera foi removida, desvinculando-a da planilha, liberando-a de atualizações. Assim o cálculo manual passa a funcionar normalmente.

Para religarmos a câmera, devolvemos a ela a sua fórmula de origem: 

Sub LigarCamera()
    Sheets("Camera").Shapes.Range(Array("Picture 3")).Select
    Selection.Formula = "=$B$6:$C$12"
End Sub

Para pastas com inúmeras câmeras, a sugestão é fazer um looping em todas as planilhas e, em cada uma, um looping nas SHAPES. Armazenar a combinação PLANILHA X IMAGEM X FORMULA em uma planilha temporária, demover todas as fórmulas e, ao final do processamento, desfazer toda a operação.

Quaisquer dívidas, estamos à disposição.

Aproveitem e conheçam o site da nossa empresa: www.excelline.com.br


Leiam também outros artigos em NOSSO BLOG.


Compre nosso material de estudo:





Contem conosco!

Agosto/2016


GILBERTO GOMES
ExcelLine - Office World





Related Posts Plugin for WordPress, Blogger...

Compartilhe