Eu tenho uma configuração para exibir uma espécie de status/painel, essencialmente um log que é atualizado de outro computador. Funciona via Excel, assim:
- Alguém adiciona dados a uma tabela em "Log_Source.xlsx" localizada em um compartilhamento de rede e os salva.
- O computador do painel (que é um Intel Compute Stick (Windows 10 Home) e um monitor montado na parede) possui um arquivo local, "Log_Dashboard.xlsx" com uma conexão de dados ao arquivo de origem na rede. A consulta é atualizada a cada minuto. Dessa forma, o dashboard pode extrair e exibir os dados, quase em tempo real, sem bloquear o arquivo para edição.
O problema:
A cada poucos dias, receberei uma mensagem no painel informando que a fonte de dados não foi encontrada. E não atualizará mais os dados. Fechar e reabrir Log_Dashboard.xlsx corrige o problema, mas como posso evitar que isso ocorra?
O que eu tentei:
- Nas configurações de energia do Windows: alterado para plano de alto desempenho. Configure o disco rígido para nunca desligar. Defina o adaptador sem fio para desempenho máximo.
- Programou um script AutoHotKey para ser executado a cada 12 horas, apenas movendo o mouse para frente e para trás. Achei que isso poderia impedir o computador de entrar no estado de suspensão, se esse fosse o problema.
- Adicionada uma macro ao arquivo Excel que o fecha e reabre a cada hora. Visto que é assim que eu corrijo o problema manualmente todas as vezes, pensei que isso resolveria o problema, mas ainda está acontecendo.
Alguma sugestão? Ou se houver outra abordagem para configurar uma exibição de painel como esta, estou aberto a isso... Obrigado.
Responder1
Postar o que funcionou para mim, caso alguém com um problema semelhante se depare com isso no futuro:
Nunca consegui descobrir por que a conexão de dados continuava caindo. Troquei o computador "painel" de um Intel Compute Stick conectado por Wifi para um antigo desktop compacto conectado por Ethernet. Isso ajudou um pouco, mas ainda tive quedas na conexão de dados, junto com outros erros do Excel, como "Sem memória".
Aqui está a solução alternativa que finalmente funcionou para mim, na minha situação:
Inseri um módulo no arquivo Excel ("Log_Dashboard.xlsm") com o seguinte código:
Sub WorkbookSaveCycle()
ThisWorkbook.Save
PID = Shell("cmd /k @echo off & echo Restarting Dashboard, please wait... & @echo off & timeout /t 4 /nobreak & ""C:\Program Files (x86)\Microsoft Office\root\Office16\excel.exe"" """ & Application.ActiveWorkbook.FullName & """ & exit", vbMaximizedFocus)
Application.Quit
End Sub
Isso simplesmente salva a pasta de trabalho, executa um comando shell que exibe uma mensagem informando que o painel está reiniciando (caso alguém esteja olhando para a tela no momento) e reabre o arquivo Excel após aguardar alguns segundos para que ele feche . ( excel.exe
o caminho do arquivo pode precisar ser alterado se estiver usando uma versão diferente do Office)
Então coloquei isso no ThisWorkbook
módulo:
Private Sub Workbook_Open()
Application.DisplayFullScreen = True
Application.OnTime Now + TimeValue("00:15:00"), "WorkbookSaveCycle"
End Sub
Quando o arquivo Excel é aberto, ele é colocado em tela cheia e, após aguardar o tempo predefinido (15 minutos aqui), chama a WorkbookSaveCycle
macro acima. O que apenas coloca o ciclo em movimento novamente, fechando e reabrindo o arquivo.
Tenho certeza de que há uma maneira melhor de fazer isso, mas ela tem se mantido basicamente estável desde a implementação dessas mudanças.