Atualizar documento do Excel sem abri-lo [duplicado]

0

Eu tenho uma planilha que quero enviar para a intranet da minha empresa para que outras pessoas possam visualizá-la. Toda vez que a planilha é aberta, ele executa um script de segundo plano que atualiza as informações. O problema é que o script é executado por cerca de 10 minutos porque ele olha para duas tabelas enormes. Existe uma maneira de atualizar a planilha uma vez por dia (por exemplo, 2h) sem que alguém precise abri-la?

    
por Lisa 23.04.2014 / 11:13

2 respostas

0

Resposta simples: não. Uma macro VBA é executada no mecanismo do Microsoft Excel, o que significa que o Excel deve ser executado para que a macro seja executada.

No entanto, o VBScript é a mesma linguagem usada como VBA, com exceção do VBA poder vincular diretamente a um arquivo microsoft excel e acessar células usando comandos como sheet (1) .cells (1,3) onde o VBScript não pode. Com muito trabalho, você pode criar um vbscript que leia e crie arquivos .csv que, no prazo, podem fornecer uma ideia de substituição.

Se isso realmente não é uma opção (e honestamente, eu não o culpo), você poderia desabilitar o script para carregar toda vez que alguém o abrir e ao invés disso fazer um trabalho de execução manual para pelo menos dar o controle quando você. Se há um pc rodando à noite que executa o Microsoft Excel (pode ser um servidor mesmo), você pode criar um script de atalho automático ou talvez um script VBA diferente que execute essa macro e use uma tarefa agendada para iniciar o Excel e abrir a pasta de trabalho. . Observe que uma tarefa agendada não pode executar a macro, portanto, você precisa facilitar uma maneira de executar a macro automaticamente. Por exemplo, você tem o workbook2.xls que tem uma macro para abrir automaticamente o workbook1.xls e, em seguida, executa sua macro de cálculo e, no final, salva o workbook1.xls e fecha os dois arquivos.

    
por 23.04.2014 / 11:31
0

Acho que isso poderia ser possível usando Application.OnTime .

Assim, quando a planilha do Excel é aberta pelo usuário, adicione o seguinte ao seu código existente

Public Sub ExecuteBigMacro()
    timeForAlert = Now + TimeValue("24:00:00")
    Application.OnTime timeForAlert, "ExecuteBigMacro"
    'the rest of your code which takes ages! 
End Sub

Isso significa inicialmente abri-lo às 2 da manhã (e toda vez que você reiniciar o aplicativo) !! Apesar de depender da situação, você pode até tê-lo atualizado a cada 4 horas e apenas aceitar durante esse tempo, haverá um atraso para o usuário !!

    
por 23.04.2014 / 11:52