Por que uma planilha do Excel 2010 com o atraso do VBA quando aberta com outras planilhas do Excel já abertas?

3

Eu tenho uma planilha do Excel 2010 relativamente pequena (~ 100K) que (via VBA) quando aberta, fecha todas as planilhas, exceto a página inicial, verifica o nome do usuário e verifica com uma tabela SQL, trazendo de volta o usuário registro para verificar suas permissões.

Algumas células são atualizadas rangeUserName, rangeCurrentUser, rangeSystemAccess, etc ...

Se eu abrir essa pasta de trabalho quando houver outras planilhas grandes (que também têm vba), levará cerca de 30 a 60 segundos para abrir, quando nenhuma outra pasta de trabalho estiver aberta, levará menos de 5 segundos.

Por que isso acontece?

    
por aSystemOverload 22.08.2012 / 14:59

1 resposta

1

Por padrão, o Excel abre cada arquivo em um único processo EXCEL.EXE - você pode assistir a isso na guia Processos do Gerenciador de Tarefas do Windows.

Portanto, continuar a abrir arquivos pode causar contenção nesse processo. Eventualmente, ele ficará sem memória e diminuirá a velocidade ou travará.

Para evitar isso, você pode iniciar janelas do Excel subsequentes como um processo EXCEL.EXE separado. Você faz isso pressionando a tecla Shift enquanto escolhe o Excel no menu Iniciar ou clica na barra de tarefas. Depois que eles são lançados como processos separados, o Windows parece gerenciar melhor os recursos - acredito que ele transfere os processos inativos para a memória virtual.

Para o Excel 2013, eles tornaram o jogo um pouco mais difícil: você precisa manter pressionada a tecla Shift + Alt até que uma janela de confirmação seja exibida.

Eu tenho a tendência de abrir todas as janelas do Excel dessa maneira, especialmente se estiver trabalhando com arquivos grandes, código VBA, tabelas dinâmicas, dados externos ou suplementos. Além de evitar problemas com recursos, isso significa que você só perde seu trabalho em uma janela se houver uma falha ou congelamento, em vez de perder todos eles de uma só vez.

    
por 17.10.2014 / 04:58