J'essaye d'écrire un script qui ouvre de nombreux fichiers Excel. Je reçois toujours l'invite:
This workbook contains links to other data sources.
Je souhaite empêcher ce message d'apparaître, afin que mon script puisse parcourir automatiquement tous les classeurs sans que je doive cliquer Don't Update
pour chacun d'eux. Actuellement, j'utilise ce qui suit:
function getWorkbook(bkPath as string) as workbook
Application.EnableEvents=False
Application.DisplayAlerts=False
getWorkbook=Workbooks.Open(bkPath,updatelinks:=0,readonly:=false)
end function
Cependant, le message apparaît toujours. Comment puis-je le supprimer?
EDIT: Il semble que ce message arrive pour les classeurs qui ont des liens rompus; Je ne voyais pas le This workbook contains one or more links that cannot be updated
message parce que j'avais réglé DisplayAlerts
sur faux. Les classeurs sont liés à des fichiers équivalents dans un dossier sur notre serveur Windows, donc lorsque le fichier correspondant est supprimé de ce dossier (ce qui se produit dans le cadre de notre flux commercial), le lien se rompt. Est-il possible de supprimer l'avertissement lorsque le lien est rompu?
En outre, j'utilise Excel 2010.
Réponses:
METTRE À JOUR:
Après tous les détails résumés et discutés, j'ai passé 2 bonnes heures à vérifier les options, et cette mise à jour est à mettre en évidence
i
.Les préparatifs
Tout d'abord, j'ai effectué une installation propre d'Office 2010 x86 sur une machine virtuelle Clean Win7 SP1 Ultimate x64 alimentée par VMWare (c'est la routine habituelle pour mes tâches de test quotidiennes, j'en ai donc déployé beaucoup).
Ensuite, j'ai changé uniquement les options Excel suivantes (c'est-à-dire que toutes les autres sont laissées telles quelles après l'installation):
Advanced > General > Ask to update automatic links
vérifié :Trust Center > Trust Center Settings... > External Content > Enable All...
(bien que celui qui concerne les connexions de données ne soit probablement pas important pour le cas):Conditions préalables
J'ai préparé et placé
C:\
un classeur exactement selon les@Siddharth Rout
suggestions de sa réponse mise à jour (partagée pour votre commodité): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx Le livre lié a ensuite été supprimé de sorte que le lien dans le partage le livre n'est pas disponible (bien sûr).Ouverture manuelle
Le fichier partagé ci-dessus montre à l'ouverture (avec les options Excel énumérées ci-dessus) 2 avertissements - dans l'ordre d'apparition:
AVERTISSEMENT # 1
Après avoir cliqué sur,
Update
j'en ai eu un autre:AVERTISSEMENT # 2
Donc, je suppose que mon environnement de test est maintenant assez similaire à celui de
OP
's) Jusqu'ici tout va bien, nous allons enfinOuverture VBA
Maintenant, je vais essayer toutes les options possibles étape par étape pour rendre l'image claire. Je ne partagerai que les lignes de code pertinentes pour plus de simplicité (un exemple de fichier complet avec le code sera partagé à la fin).
1. Application.Workbooks.Open simple
Pas de surprise - cela produit LES DEUX avertissements, comme pour l'ouverture manuelle ci-dessus.
2. Application.DisplayAlerts = False
Ce code se termine par AVERTISSEMENT # 1 , et l'une ou l'autre des options cliquées (
Update
/Don't Update
) ne produit AUCUN autre avertissement, c'est-à-direApplication.DisplayAlerts = False
supprime l' AVERTISSEMENT # 2 .3. Application.AskToUpdateLinks = False
En face de
DisplayAlerts
, ce code se termine par AVERTISSEMENT # 2 uniquement, c'est-à-direApplication.AskToUpdateLinks = False
supprime l' AVERTISSEMENT # 1 .4. Double faux
Apparemment, ce code finit par supprimer les DEUX AVERTISSEMENTS .
5. UpdateLinks: = False
Enfin, cette solution 1 ligne (proposée à l'origine par
@brettdj
) fonctionne de la même manière que Double False: AUCUN AVERTISSEMENT n'est affiché!Conclusions
Sauf une bonne pratique de test et un cas résolu très important (je peux rencontrer de tels problèmes tous les jours en envoyant mes classeurs à une tierce partie, et maintenant je suis prêt), 2 autres choses apprises:
Merci beaucoup à tous ceux qui ont contribué à la solution, et en particulier à OP qui a soulevé la question. J'espère que mes enquêtes et les étapes de test décrites en détail ont été utiles non seulement pour moi)
Le fichier d'exemple avec les exemples de code ci-dessus est partagé (de nombreuses lignes sont délibérément commentées): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
Réponse originale (testée pour Excel 2007 avec certaines options):
Ce code fonctionne très bien pour moi - il parcourt TOUS les fichiers Excel spécifiés à l'aide de caractères génériques dans le
InputFolder
:Je l'ai essayé avec des livres avec des liens externes indisponibles - aucun avertissement.
Exemple de fichier: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
la source
Application.DisplayAlerts = False
ne désactivera pas ces avertissements :)?Application.AskToUpdateLinks
dans la fenêtre Exécution. Est-il déjà défini sur false ou est-ce vrai ...Ouvrez l'éditeur VBA d'Excel et saisissez-le dans la fenêtre d'exécution (voir capture d'écran)
Fermez Excel, puis ouvrez votre fichier. Il ne vous le demandera plus. N'oubliez pas de le réinitialiser lorsque vous fermez le classeur, sinon il ne fonctionnera pas non plus pour les autres classeurs.
Capture d'écran :
ÉDITER
Donc, en l'appliquant à votre code, votre code ressemblera à ceci
SUIVRE
Sigil, Le code ci-dessous fonctionne également sur les fichiers avec des liens rompus. Voici mon code de test.
Conditions d'essai
Sample1.xlsx
etSample2.xlsx
enregistrez-les surC:\
A1
deSample1.xlsx
, tapez cette formule='C:\[Sample2.xlsx]Sheet1'!$A$1
Sample
. Vous remarquerez que vous n'obtiendrez pas d'invite.Code
la source
Application.DisplayAlerts = False
est également ajouté?Excel 2016 J'ai eu un problème similaire lorsque j'ai créé un classeur / fichier, puis j'ai changé les noms, mais l'ancien nom du classeur a été conservé. Après beaucoup de recherches sur Google ... eh bien, je n'ai pas trouvé de réponse finale là-bas ...
Allez dans DONNÉES -> Modifier le lien -> Invite de démarrage (en bas) Ensuite, choisissez la meilleure option pour vous.
la source
Je voulais supprimer l'invite qui vous demande si vous souhaitez mettre à jour les liens vers un autre classeur lorsque mon classeur est ouvert manuellement dans Excel (au lieu de l'ouvrir par programme via VBA). J'ai essayé d'inclure:
Application.AskToUpdateLinks = False
comme première ligne de maAuto_Open()
macro mais cela n'a pas fonctionné. J'ai découvert cependant que si vous le mettez à la place dans laWorkbook_Open()
fonction duThisWorkbook
module, cela fonctionne à merveille - le dialogue est supprimé mais la mise à jour se produit toujours silencieusement en arrière-plan.la source
Workbook_Open()
événement pour chacun des classeurs de mon ensemble cible.(Je n'ai pas assez de points de répétition pour ajouter un commentaire, mais je souhaite clarifier les réponses ici)
Application.AskToUpdateLinks = False n'est probablement pas ce que vous voulez.
Si elle est définie à False, MS Excel va tenter de mettre à jour les liens automatiquement l'utilisateur tout simplement pas rapidement à l' avance, contre-intuitif sorta.
La bonne solution, si vous cherchez à ouvrir un fichier sans mettre à jour les liens devrait être:
Workbook.Open (UpdateLinks: = 0)
Lien connexe: Différence dans AskToUpdateLinks = False et UpdateLinks: = 0
la source
J'ai trouvé une solution temporaire qui me permettra au moins de traiter ce travail. J'ai écrit un court script AutoIt qui attend que la fenêtre "Mettre à jour les liens" apparaisse, puis clique sur le bouton "Ne pas mettre à jour". Le code est le suivant:
Jusqu'à présent, cela semble fonctionner. J'aimerais vraiment trouver une solution entièrement VBA, afin de pouvoir en faire une application autonome.
la source
J'espère apporter une contribution supplémentaire pour résoudre cette question (ou une partie de celle-ci).
Cela fonctionnera pour ouvrir un
Excel
fichier à partir d'un autre. Une ligne de code de M. Peter L. , pour le changement, utilisez ce qui suit:C'est dans
MSDS
. L'effet est qu'il met simplement à jour tout (oui, tout) sans avertissement. Cela peut également être vérifié si vous enregistrez une macro.Dans
MSDS
, il fait référence àMS EXCEL 2010
et2013
. Je pense queMS EXCEL 2016
cela a également couvert.J'ai
MS EXCEL 2013
, et j'ai une situation à peu près la même que ce sujet. J'ai donc un fichier (appelez-leA
) avec leWorkbook_Open
code d'événement qui reste toujours bloqué sur l' invite des liens de mise à jour . J'ai un autre fichier (appelez-leB
) connecté à celui-ci et les tableaux croisés dynamiques me forcent à ouvrir le fichierA
afin que le modèle de données puisse être chargé. Puisque je veux ouvrir leA
fichier en silence en arrière-plan, j'utilise simplement la ligne que j'ai écrite ci-dessus, avec unWindows("A.xlsx").visible = false
, et, mis à part un temps de chargement plus long, j'ouvre leA
fichier à partir duB
fichier sans problème ni avertissement, et entièrement mis à jour .la source