Estou tentando escrever um script que abre muitos arquivos do Excel. Eu continuo recebendo o prompt:
This workbook contains links to other data sources.
Quero evitar que essa mensagem apareça, para que meu script possa percorrer automaticamente todas as pastas de trabalho, sem que eu precise clicar Don't Update
em cada uma. Atualmente estou usando o seguinte:
function getWorkbook(bkPath as string) as workbook
Application.EnableEvents=False
Application.DisplayAlerts=False
getWorkbook=Workbooks.Open(bkPath,updatelinks:=0,readonly:=false)
end function
No entanto, a mensagem ainda está aparecendo. Como posso suprimir isso?
EDIT: Parece que esta mensagem está chegando para pastas de trabalho que têm links quebrados; Eu não estava vendo a This workbook contains one or more links that cannot be updated
mensagem porque havia definido DisplayAlerts
como falso. As pastas de trabalho são vinculadas a arquivos equivalentes em uma pasta em nosso servidor Windows, portanto, quando o arquivo correspondente é excluído dessa pasta (o que acontece como parte de nosso fluxo de negócios), o link é quebrado. É possível suprimir o aviso quando o link é quebrado?
Além disso, estou usando o Excel 2010.
Respostas:
ATUALIZAR:
Depois de todos os detalhes resumidos e discutidos, passei 2 horas justas verificando as opções, e essa atualização é para pontuar todos os
i
s.Preparativos
Em primeiro lugar, executei uma instalação limpa do Office 2010 x86 na máquina virtual Clean Win7 SP1 Ultimate x64 com VMWare (essa é uma rotina normal para minhas tarefas diárias de teste, portanto, tenho muitos deles implantados).
Em seguida, alterei apenas as seguintes opções do Excel (ou seja, todas as outras são deixadas como estão após a instalação):
Advanced > General > Ask to update automatic links
verificado :Trust Center > Trust Center Settings... > External Content > Enable All...
(embora aquele relacionado às conexões de dados provavelmente não seja importante para o caso):Condições prévias
Eu preparei e coloquei em
C:\
uma pasta de trabalho exatamente de acordo com as@Siddharth Rout
sugestões de sua resposta atualizada (compartilhada para sua conveniência): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx O livro vinculado foi então excluído para que o link no link compartilhado livro não está disponível (com certeza).Abertura Manual
O arquivo compartilhado acima mostra ao abrir (tendo as opções do Excel listadas acima) 2 avisos - na ordem em que aparecem:
AVISO # 1
Depois de clicar em
Update
, esperava receber outro:AVISO # 2
Então, suponho que meu ambiente de teste agora é muito semelhante ao
OP
de) Até agora tudo bem, finalmente vamos paraAbertura VBA
Agora vou tentar todas as opções possíveis, passo a passo, para deixar a imagem clara. Vou compartilhar apenas linhas de código relevantes para simplificar (o arquivo de amostra completo com o código será compartilhado no final).
1. Aplicativo simples.Livros de trabalho.Abrir
Nenhuma surpresa - isso produz AMBOS avisos, como para a abertura manual acima.
2. Application.DisplayAlerts = False
Este código termina com o AVISO # 1 , e qualquer opção clicada (
Update
/Don't Update
) NÃO produz nenhum aviso adicional, ou seja,Application.DisplayAlerts = False
suprime o AVISO # 2 .3. Application.AskToUpdateLinks = False
Ao contrário
DisplayAlerts
, este código termina apenas com o AVISO # 2 , ou seja,Application.AskToUpdateLinks = False
suprime o AVISO # 1 .4. Duplo Falso
Aparentemente, esse código acaba suprimindo AMBOS OS AVISOS .
5. UpdateLinks: = False
Finalmente, esta solução de 1 linha (originalmente proposta por
@brettdj
) funciona da mesma maneira que Double False: NENHUM AVISO é mostrado!Conclusões
Exceto uma boa prática de teste e um caso resolvido muito importante (posso enfrentar esses problemas todos os dias ao enviar minhas pastas de trabalho para terceiros, e agora estou preparado), mais 2 coisas aprendidas:
Muito obrigado a todos que contribuíram para a solução e, especialmente, ao OP que levantou a questão. Espero que minhas investigações e etapas de teste completamente descritas tenham sido úteis não só para mim)
O arquivo de amostra com as amostras de código acima é compartilhado (muitas linhas são comentadas deliberadamente): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
Resposta original (testada para Excel 2007 com certas opções):
Este código funciona bem para mim - ele percorre TODOS os arquivos do Excel especificados usando curingas em
InputFolder
:Tentei com livros com links externos indisponíveis - sem avisos.
Arquivo de amostra: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
fonte
Application.DisplayAlerts = False
não desativará esses avisos :)?Application.AskToUpdateLinks
na janela Imediata. Já está definido como falso ou é verdade ...Abra o editor VBA do Excel e digite-o na janela imediata (veja a captura de tela)
Feche o Excel e abra seu arquivo. Não vai perguntar a você novamente. Lembre-se de redefini-lo ao fechar a pasta de trabalho, caso contrário, ela não funcionará também com outras pastas de trabalho.
ScreenShot :
EDITAR
Então, aplicando-o ao seu código, seu código ficará assim
ACOMPANHAMENTO
Sigil, O código abaixo também funciona em arquivos com links quebrados. Aqui está meu código de teste.
Condições de Teste
Sample1.xlsx
eSample2.xlsx
salve-os emC:\
A1
deSample1.xlsx
, digite esta fórmula='C:\[Sample2.xlsx]Sheet1'!$A$1
Sample
. Você notará que não receberá um prompt.Código
fonte
Application.DisplayAlerts = False
for adicionado também?Excel 2016 Tive um problema semelhante ao criar uma pasta de trabalho / arquivo e depois alterar os nomes, mas de alguma forma o nome da pasta de trabalho antiga foi mantido. Depois de muito pesquisar no Google ... bem, não encontrei nenhuma resposta final lá ...
Vá para DADOS -> Editar Link -> Prompt de Inicialização (na parte inferior) Em seguida, escolha a melhor opção para você.
fonte
Eu queria suprimir o prompt que pergunta se você deseja atualizar links para outra pasta de trabalho quando minha pasta de trabalho é aberta manualmente no Excel (em vez de abri-la programaticamente via VBA). Tentei incluir:
Application.AskToUpdateLinks = False
como a primeira linha em minhaAuto_Open()
macro, mas não funcionou. No entanto, descobri que, se você colocá-lo naWorkbook_Open()
função doThisWorkbook
módulo, ele funciona perfeitamente - a caixa de diálogo é suprimida, mas a atualização ainda ocorre silenciosamente em segundo plano.fonte
Workbook_Open()
evento para cada uma das pastas de trabalho em meu conjunto de destino.(Não tenho pontos de representação suficientes para adicionar um comentário, mas quero adicionar alguma clareza nas respostas aqui)
Application.AskToUpdateLinks = False provavelmente não é o que você deseja.
Se definido como falso, então MS Excel irá tentar atualizar os links automaticamente ele simplesmente não solicitará que o usuário de antemão, contra-intuitivo sorta.
A solução correta, se você deseja abrir um arquivo sem atualizar os links, deve ser:
Workbook.Open (UpdateLinks: = 0)
Link relacionado: Diferença em AskToUpdateLinks = False e UpdateLinks: = 0
fonte
Encontrei uma solução temporária que pelo menos me permitirá processar este trabalho. Eu escrevi um pequeno script AutoIt que espera a janela "Atualizar Links" aparecer e então clico no botão "Não Atualizar". O código é o seguinte:
Até agora, isso parece estar funcionando. Eu realmente gostaria de encontrar uma solução que seja inteiramente VBA, no entanto, para que eu possa tornar este um aplicativo independente.
fonte
Espero dar alguma contribuição extra para resolver esta questão (ou parte dela).
Isso funcionará para abrir um
Excel
arquivo de outro. Uma linha de código do Sr. Peter L. , para a mudança, use o seguinte:Isso está dentro
MSDS
. O efeito é que ele apenas atualiza tudo (sim, tudo) sem nenhum aviso. Isso também pode ser verificado se você gravar uma macro.Em
MSDS
, refere-se aMS EXCEL 2010
e2013
. Estou pensando queMS EXCEL 2016
isso também está coberto.Eu tenho
MS EXCEL 2013
, e tenho uma situação muito parecida com a deste tópico. Portanto, tenho um arquivo (chame-oA
) comWorkbook_Open
código de evento que sempre fica travado no prompt de links de atualização . Eu tenho outro arquivo (chamá-loB
) conectado a este, e as tabelas dinâmicas me forçam a abrir o arquivoA
para que o modelo de dados possa ser carregado. Como quero abrir oA
arquivo silenciosamente em segundo plano, apenas uso a linha que escrevi acima, com umWindows("A.xlsx").visible = false
, e, além de um maior tempo de carregamento, abro oA
arquivo doB
arquivo sem problemas ou avisos, e totalmente atualizado .fonte