Comment faire pour supprimer la mise à Jour des Liens d'avertissement?
Je suis en train d'écrire un script qui ouvre de nombreux fichiers Excel. Je reçois l'invite:
This workbook contains links to other data sources.
Je veux garder ce message d'apparaître, de sorte que mon script peut juste aller à travers tous les classeurs sans m'avoir à cliquer sur Don't Update
pour chacun. Actuellement, je suis en utilisant les suivantes:
function getWorkbook(bkPath as string) as workbook
Application.EnableEvents=False
Application.DisplayAlerts=False
getWorkbook=Workbooks.Open(bkPath,updatelinks:=0,readonly:=false)
end function
Toutefois, le message est encore apparaître. Comment puis-je le supprimer?
EDIT: Il semble que ce message est à venir 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 mis DisplayAlerts
à false. Les classeurs sont liés à l'équivalent des fichiers dans un dossier sur notre serveur Windows, donc quand le fichier correspondant est supprimé à partir de ce dossier (ce qui arrive dans le cadre de notre courant d'affaires), le lien est rompu. Est-il possible de supprimer l'avertissement lorsque le lien est rompu?
Aussi, je suis à l'aide d'Excel 2010.
- De la discussion avec @SiddharthRout nous voyons maintenant la cause en est un des paramètres différents pour les différentes versions d'Excel: il est probable que vous utilisez Excel 2010 ou plus tard (Siddharth de la Déroute a 2010), alors que je suis à l'aide de 2007, et ne voient pas les avertissements à tous si des liens sont OK. Nous allons effectuer quelques recherches supplémentaires et d'obtenir de retour avec de la solution de travail - je l'espère) Maintenant, essayez de Siddharth de la Déroute de la réponse.
- Mon upvote pour les cas très intéressant!
- depuis que vous êtes de ne pas obtenir la mise à jour des liens, même lorsque vous ouvrez le fichier manuellement, je pense qu'il y a un paramètre que je suis absent quelque part. Permettez-moi de le tester dans Excel 2007, avant que je ne peux confirmer. 🙂
- Pouvez-vous poster un exemple de fichier de problème? Il serait bon de voir la nature des liens
- il est propriétaire donc je ne peux pas poster un fichier entier. Je vais étudier les liens pour que je puisse voir si il y a un problème avec eux.
- veuillez trouver les mises à jour de répondre à toutes les options testé pour Excel 2010.
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR:
Après tous les détails résumées et discutées, j'ai passé 2 heures juste en cochant les options, et cette mise à jour est à mettre les points sur
i
s.Préparations
Tout d'abord, j'ai effectué un nettoyage Office 2010 x86 installer sur Win7 Clean Ultimate SP1 x64 virtual machine alimentée par VMWare (c'est d'habitude pour mon essai quotidien des tâches, j'ai donc beaucoup d'entre eux sont déployés).
Puis, j'ai changé les options d'Excel (c'est à dire tous les autres sont de gauche comme après l'installation):
Advanced > General > Ask to update automatic links
vérifié:Trust Center > Trust Center Settings... > External Content > Enable All...
(bien que celle qui se rapporte à des Connexions de Données est probablement pas important pour le cas):Conditions préalables
J'ai préparé et mis à
C:\
un classeur exactement comme par@Siddharth Rout
suggestions dans sa mise à jour de la réponse (partagé pour votre commodité): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx Liés livre a ensuite été supprimé de sorte que le lien partagé livre n'est pas disponible (pour être sûr).Ouverture Manuelle
Ci-dessus fichier partagé s'affiche sur l'ouverture (ayant énumérées ci-dessus, les options Excel) 2 avertissements - dans l'ordre d'apparition:
AVERTISSEMENT #1
Après cliquez sur
Update
j'ai évidemment eu un autre:AVERTISSEMENT #2
Donc, je suppose que mon environnement de test est maintenant assez bien similaire à
OP
s') c'est très bien, nous avons finalement aller àVBA Ouverture
Maintenant je vais essayer toutes les options possibles, étape par étape, pour rendre l'image claire. Je vais partager que des lignes de code pour des raisons de simplicité (exemple complet de fichier avec le code sera partagé à la fin).
1. Application Simple.Les classeurs.Ouvrir
Pas de surprise de ce produit à la FOIS des mises en garde, comme pour une ouverture manuelle ci-dessus.
2. Application.DisplayAlerts = False
Ce code se termine avec AVERTISSEMENT #1, et soit l'option cliqué (
Update
/Don't Update
), ne produit PAS d'autres avertissements, c'est à direApplication.DisplayAlerts = False
supprime AVERTISSEMENT #2.3. Application.AskToUpdateLinks = False
Face à
DisplayAlerts
, ce code se termine avec AVERTISSEMENT #2, c'est a direApplication.AskToUpdateLinks = False
supprime AVERTISSEMENT #1.4. Double Faux
Apparemment, ce code se termine avec la suppression de DEUX AVERTISSEMENTS.
5. UpdateLinks:=False
Enfin, ce 1 de la ligne de solution (proposée à l'origine par
@brettdj
) fonctionne de la même manière que le Double Faux: PAS d'AVERTISSEMENTS sont présentées!Conclusions
Sauf un bon test pratique et très important résolus au cas (je peut faire face à de tels problèmes de tous les jours lors de l'envoi de mes classeurs à la 3e partie, et maintenant, je suis prêt), soit 2 de plus de choses apprises:
Merci beaucoup à tous ceux qui ont contribué à la solution, et en particulier de l'OP qui a posé la question. J'espère que mes enquêtes et décrit en détail les tests ont été utile non seulement pour moi)
Exemple de fichier avec le code ci-dessus échantillons est partagée (plusieurs lignes sont commentées de façon délibérée): https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
Réponse originale à cette question (testé pour Excel 2007 avec certaines options):
Ce code fonctionne très bien pour moi - il parcourt TOUS les fichiers Excel spécifié à l'aide de caractères génériques dans le
InputFolder
:Je l'ai essayé avec des livres de l'indisponibilité de liens externes - pas de mises en garde.
Exemple de fichier: https://www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm
Application.DisplayAlerts = False
ne sera pas désactiver ces mises en garde 🙂?Application.AskToUpdateLinks
dans la fenêtre exécution. Est-il déjà défini sur false ou est-ce vrai...Prompt user on automatic update for Workbook Links.
j'ai essayé toutes ces combinaisons et aucun d'entre eux ont travaillé. La seule chose qui a fonctionné est AutoIt solution que j'ai posté ci-dessous. Êtes-vous en mesure de supprimer les avertissements lorsque lesPrompt user...
est réglé?Ouvrir l'Éditeur VBA d'Excel et tapez ceci dans la Fenêtre d'exécution (Voir Capture d'écran)
Fermer Excel et ouvrez votre Fichier. Il ne vous demandera pas de nouveau. N'oubliez pas de réinitialiser lorsque vous fermez le classeur sinon cela ne fonctionnera pas pour les autres classeurs en tant que bien.
Capture d'écran:
MODIFIER
Afin de les appliquer à votre code, le code ressemblera à ceci
SUIVI
Sigil, Le code ci-dessous fonctionne sur les fichiers avec des liens brisés ainsi. Voici mon code de test.
Conditions De Test
Sample1.xlsx
etSample2.xlsx
et de les enregistrer surC:\
A1
deSample1.xlsx
, tapez cette formule='C:\[Sample2.xlsx]Sheet1'!$A$1
Sample
. Vous remarquerez que vous ne sera pas obtenir une invite de commandes.Code
Application.DisplayAlerts = False
est ajoutée ainsi?Application.AskToUpdateLinks=False
ne pas supprimer l'avertissement soit, si je l'utilise seul ou en conjonction avecApplication.DisplayAlerts=False
etWorkbooks.Open(bkPath, False)
. Je vais vérifier pour voir si le classeur contient des liens cassés, si cela fait une différence..AskToUpdateLinks=False
solution et cela ne fonctionne pas, voir mon commentaire à brettdj ci-dessus.Je voulais supprimer l'invite vous demande si vous souhaitez mettre à jour des liens vers un autre classeur lors de mon classeur est ouvert manuellement dans Excel (par opposition à l'ouverture par programmation via VBA). J'ai essayé, y compris:
Application.AskToUpdateLinks = False
la première ligne dans monAuto_Open()
macro mais cela ne fonctionne pas. J'ai découvert, cependant, que si vous le mettez à la place dans laWorkbook_Open()
fonction dans leThisWorkbook
module, qui fonctionne à merveille - le dialogue est supprimée, mais la mise à jour se produit toujours silencieusement en arrière-plan.Workbook_Open()
événement chaque de la des classeurs dans mon objectif fixé.Excel 2016
J'ai eu un problème similaire quand j'ai créé un classeur/fichier et puis j'ai changé les noms, mais en quelque sorte l'ancien nom du classeur a été conservé.
Après beaucoup de recherches sur google... eh bien, n'a pas trouvé de réponse définitive, il...
Go de DATA -> Modifier le Lien -> Invite de Démarrage (en bas) Puis choisir la meilleure option pour vous.
J'ai trouvé une solution temporaire qui va au moins me permettre de processus de ce travail. J'ai écrit un court script AutoIt qui attend la "mise à Jour des Liens" fenêtre apparaisse, puis clique sur "Ne pas mettre à Jour". Le Code est comme suit:
Jusqu'à présent cela semble être au travail. J'aimerais vraiment trouver une solution entièrement VBA, cependant, de sorte que je peux en faire une application autonome.
L'espoir de donner une certaine supplémentaire de l'entrée dans la résolution de cette question (ou une partie).
Cela fonctionne pour l'ouverture d'un
Excel
fichier à partir d'un autre. Une ligne de code à partir de M. Pierre L., pour le modifier, utilisez la commande suivante:C'est dans
MSDS
. L'effet est qu'il met juste à jour tout (oui, tout) avec aucun avertissement. Cela peut également être cochée si vous enregistrez une macro.Dans
MSDS
, il se réfère à ceMS EXCEL 2010
et2013
. Je pense queMS EXCEL 2016
a ce couvert.J'ai
MS EXCEL 2013
, et ont une situation à peu près le même que celui de la rubrique. J'ai donc un fichier (que l'on appelleraA
) avecWorkbook_Open
code d'événement qui est toujours coincé sur le mise à jour des liens invite.J'ai un autre fichier (que l'on appellera
B
) relié à celle-ci, et Tableaux croisés dynamiques me force à ouvrir le fichierA
de sorte que le modèle de données peuvent être chargées. Depuis je veux ouvrir leA
fichier silencieusement en arrière-plan, je viens d'utiliser la ligne que j'ai écrit ci-dessus, avec unWindows("A.xlsx").visible = false
, et, à part un plus gros temps de chargement, j'ouvre laA
fichier à partir de laB
fichier avec des problèmes ou des avertissements, et entièrement mis à jour.(Je n'ai pas assez de points de rep pour ajouter un commentaire, mais je tiens à ajouter un peu de clarté sur les réponses ici)
Application.AskToUpdateLinks = False est probablement pas ce que vous voulez.
Si la valeur est False, alors MS Excel sera tenter de mettre à jour les liens automatiquement juste de ne pas inviter l'utilisateur à l'avance, sorta contre-intuitif.
La bonne solution, si vous êtes à la recherche pour ouvrir un fichier sans la mise à jour des liens devraient être:
Classeur.Ouvert(UpdateLinks:=0)
Lien:
Différence dans AskToUpdateLinks=False et UpdateLinks:=0