リンク更新の警告を抑制する方法は?


109

多くのExcelファイルを開くスクリプトを記述しようとしています。私はプロンプトを受け取り続けます:

This workbook contains links to other data sources.

このメッセージが表示されないようにしたいので、自分のスクリプトがすべてのブックを自動的に実行できるようになりましたDon't Update。現在、私は以下を使用しています:

function getWorkbook(bkPath as string) as workbook

Application.EnableEvents=False
Application.DisplayAlerts=False
getWorkbook=Workbooks.Open(bkPath,updatelinks:=0,readonly:=false)

end function

ただし、メッセージはまだ表示されています。どうすれば抑制できますか?

編集:このメッセージは、リンクが壊れているワークブックに対して表示されるようです。falseにThis workbook contains one or more links that cannot be updated設定DisplayAlertsしたため、メッセージは表示されませんでした。ワークブックは、Windowsサーバー上のフォルダー内の同等のファイルにリンクされているため、一致するファイルがそのフォルダーから削除されると(ビジネスフローの一部として発生します)、リンクが壊れます。リンク切れ時の警告を抑制できますか?

また、Excel 2010を使用しています。


1
@SiddharthRoutとのディスカッションから、原因はExcelのバージョンごとに異なる設定にあることがわかります。Excel2010以降(Siddharth Routも2010を使用している可能性が高い)ですが、2007を使用していて、リンクがあれば警告はまったく表示されません。大丈夫です。さらに調査を行い、実際の解決策に戻ります-私はそう願っています)では、Siddharth Routの答えを試してください。
Peter L.

2
非常に興味深いケースに対する私の賛成票!
Peter L.

@PeterL。ファイルを手動で開いても更新リンクが表示されないので、どこかに欠けている設定があると思います。確認する前に、Excel 2007でテストしてみましょう。:)
Siddharth Rout 2013

問題ファイルのサンプルを投稿できますか?リンクの性質を確認するのは良いことです
brettdj

@brettdj、それは独自仕様なので、ファイル全体を投稿することはできません。リンクを調査して、問題があるかどうかを確認します。
シギル2013

回答:


139

更新:

すべての詳細を要約して議論した後、私はオプションのチェックに2時間を費やしました。 i。ます。

準備

まず、VMWareを搭載したClean Win7 SP1 Ultimate x64仮想マシンにOffice 2010 x86のクリーンインストールを実行しました(これは日常のテストタスクの通常のルーチンなので、それらの多くを展開しています)。

次に、次のExcelオプションのみを変更しました(つまり、他のすべてのオプションはインストール後もそのままです)。

  • Advanced > General > Ask to update automatic links チェック済み

自動リンクの更新を依頼する

  • Trust Center > Trust Center Settings... > External Content > Enable All... (ただし、データ接続に関連するものは、このケースではほとんど重要ではありません):

外部コンテンツ

前提条件

私は彼の更新された回答の提案C:\に従って正確にワークブックに準備し、配置しました@Siddharth Rout(あなたの便宜のために共有しました):https : //www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsxリンクされた本は削除されました共有にリンクしているので、本は入手できません(確かに)。

手動で開く

上記の共有ファイルは、開くと(上記のExcelオプションがある場合)2つの警告を表示します-出現順に:

警告#1

このワークブックには、他のデータソースへのリンクが含まれています

クリックした後、Update私はおそらく別のものを得ました:

警告#2

このブックには、更新できないリンクが1つ以上含まれています

ですから、私のテスト環境は今とほとんど同じになっていると思います OP)これまでのところ、私たちは最終的に

VBAオープニング

次に、すべての可能なオプションを段階的に試して、画像を明確にします。簡単にするために、関連するコード行のみを共有します(コードを含む完全なサンプルファイルは最後に共有されます)。

1.シンプルなApplication.Workbooks.Open

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"

驚くべきことではありません。これは、上記の手動による開封と同様に、両方の警告を生成します。

2. Application.DisplayAlerts = False

Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True

このコードは、警告#1で終わり、どちらのオプション(Update/ Don't Update)をクリックしても、警告は生成Application.DisplayAlerts = Falseされません。つまり、警告#2が抑制されます。

3. Application.AskToUpdateLinks = False

Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True

の反対でDisplayAlerts、このコードはWARNING#2のみで終了します。つまりApplication.AskToUpdateLinks = FalseWARNING#1を抑制します。

4.二重誤り

Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True

どうやら、このコードは両方の警告を抑制することになります。

5. UpdateLinks:= False

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=False

最後に、この1行のソリューション(元はによって提案されました@brettdj)は、Double Falseと同じように機能します。警告は表示されません!

結論

適切なテストプラクティスと非常に重要な解決済みのケース(サードパーティにワークブックを送信しているときに毎日このような問題に直面する可能性があり、準備ができている)を除いて、さらに2つのことを学びます。

  1. バージョンに関係なく、特にVBAソリューションの場合、Excelオプションは重要です。
  2. すべてのトラブルには、簡潔で洗練された解決策があります。そのためのもう1つの証拠です!)

ソリューションに貢献してくれた皆さん、特に質問をしてくれたOPに感謝します。私の調査と完全に記述されたテスト手順が私だけでなく役立つことを願っています)

上記のコードサンプルを含むサンプルファイルは共有されています(多くの行は意図的にコメント化されています):https : //www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm

元の回答(特定のオプションを使用してExcel 2007でテスト済み):

このコードは私にとってはうまくいきます-でワイルドカードを使用して指定されたすべてのExcelファイルをループしますInputFolder

Sub WorkbookOpening2007()

Dim InputFolder As String
Dim LoopFileNameExt As String

InputFolder = "D:\DOCUMENTS\" 'Trailing "\" is required!

LoopFileNameExt = Dir(InputFolder & "*.xls?")
Do While LoopFileNameExt <> ""

Application.DisplayAlerts = False
Application.Workbooks.Open (InputFolder & LoopFileNameExt)
Application.DisplayAlerts = True

LoopFileNameExt = Dir
Loop

End Sub

私は利用できない外部リンクのある本でそれを試しました-警告はありません。

サンプルファイル:https : //www.dropbox.com/s/9bwu6pn8fcogby7/NoWarningsOpen.xlsm


6
Application.DisplayAlerts = Falseこれらの警告は無効になりません:)
Siddharth Rout

@SiddharthRout Sid私はそれらが表示されないことを誓います:そのようなリンクを含むファイルがあり、手動で開いているときに警告が表示されます。上記のスクリプトを使用-警告なし)ビデオを共有する場合があります)))Excel 2007-念のため。
Peter L.

OK試してみてください:) 2つの新しいワークブックを開きます。それらをbook1.xlsxおよびbook2.xlsxとして保存します。book1のセルA1に「=」と入力し、Book2のセルA1をポイントします。必要に応じてBook2のセルA1に何かを入力し、両方のワークブックを閉じます。コードを使用してbook1を開くと、プロンプトが表示されることがわかります:)
Siddharth Rout

また、上記の演習を実行する前?Application.AskToUpdateLinksに、イミディエイトウィンドウで確認してください。すでにfalseに設定されていますか、それともtrueですか
Siddharth Rout

2
+1からbrettdjまで。すべてのレポートが類似している場合、顧客は満足している必要があります)
Ksenia

22

ExcelのVBAエディターを開き、これをイミディエイトウィンドウに入力します(スクリーンショットを参照)

Application.AskToUpdateLinks = False 

Excelを閉じて、ファイルを開きます。再度プロンプトが表示されることはありません。ブックを閉じるときに必ずリセットしてください。リセットしないと、他のブックでも機能しません。

ScreenShot

ここに画像の説明を入力してください

編集する

コードに適用すると、コードは次のようになります

Function getWorkbook(bkPath As String) As Workbook
    Application.AskToUpdateLinks = False
    Set getWorkbook = Workbooks.Open(bkPath, False)
    Application.AskToUpdateLinks = True
End Function

ファローアップ

Sigil、以下のコードは、リンクが壊れているファイルでも機能します。これが私のテストコードです。

試験条件

  1. 2つの新しいファイルを作成します。それらに名前を付けSample1.xlsxSample2.xlsx保存しますC:\
  2. のセルA1Sample1.xlsx次の数式を入力してください='C:\[Sample2.xlsx]Sheet1'!$A$1
  3. 両方のファイルを保存して閉じます
  4. Sample2.xlsxを削除します!!!
  5. 新しいワークブックを開き、モジュールがこのコードを貼り付けて実行しSampleます。プロンプトが表示されないことがわかります。

コード

Option Explicit

Sub Sample()
    getWorkbook "c:\Sample1.xlsx"
End Sub

Function getWorkbook(bkPath As String) As Workbook
    Application.AskToUpdateLinks = False
    Set getWorkbook = Workbooks.Open(bkPath, False)
    Application.AskToUpdateLinks = True
End Function

3
そのコードは私にとってSid(xl2010)で機能し、メッセージを無効にしましたが、バックグラウンドでリンクを更新しました。`Set getWorkbook = Workbooks.Open(bkPath、False)`を使用すると警告が抑制され、更新は行われません。xl03およびxl10の
brettdj

1
デイブ、ありがとう。:)ところで、私はあなたがxl03とxl2007を意味していたと思います:P上記の投稿もあなたの提案を反映するように編集しました。
Siddharth Rout 2013

1
@brettdjありがとうございます!私たちはその朝、シドと一緒に良い時間を過ごし、事件を理解しようとしました。それで、上記のコードはExcelバージョンのすべての警告を抑制し、リンクをサイレントに更新しますか?また、更新を回避するためにコードをどのように変更する必要がありますか?申し訳ありませんが、私はオプションで少し迷っていますが、私がすべて正しく説明したことを願っています)
ピーターL.

@brettdjとApplication.DisplayAlerts = False追加された場合はどうなりますか?
Peter L.

1
@sigil:ワークブックを見ないと、これ以上コメントできません。さまざまな条件でコードをテストしたところ、問題なく動作しました。実際、それはそれらのアラートを抑制する正しい方法です...
Siddharth Rout

6

Excel 2016ワークブック/ファイルを作成してから名前を変更したときに同様の問題が発生しましたが、どういうわけか古いワークブック名​​が保持されていました。たくさんググった後...まあ、そこには最終的な答えは見つかりませんでした...

データ->リンクの編集->スタートアッププロンプト(下部)に移動し、最適なオプションを選択します。


3
これが最良の解決策です。これは、この選択が行われたワークブックにのみ影響し、VBAを必要としません。
ガイア

5

(VBAを介してプログラムで開くのではなく)Excelで手動でブックを開いたときに、別のブックへのリンクを更新するかどうかを尋ねるプロンプトを抑制したいと思いました。私が含めてみました:マクロのApplication.AskToUpdateLinks = False最初の行として、Auto_Open()それはうまくいきませんでした。しかし、代わりにモジュールのWorkbook_Open()関数にそれを置くとThisWorkbook、それは見事に機能します-ダイアログは抑制されますが、更新はバックグラウンドで静かに行われます。

 Private Sub Workbook_Open()
    ' Suppress dialog & update automatically without asking
    Application.AskToUpdateLinks = False
End Sub

良いアイデア; 残念ながら、このプロジェクトでは、内容を変更できない一連のワークブックを開く必要がありました。したがってWorkbook_Open()、ターゲットセットの各ワークブックにイベントを設定する方法はありません。
シジル2013年

3

(コメントを追加するのに十分な担当者ポイントはありませんが、ここで回答を明確にしたいと思います)

Application.AskToUpdateLinks = Falseはおそらく望んでいるものではありません。

Falseに設定すると、MS Excel リンクを自動的に更新しようとしますが、事前にユーザーにプロンプ​​トを表示することはなく、直感に反しています。

リンク更新せずにファイルを開く場合の正しい解決策は次のとおりです。

Workbook.Open(UpdateLinks:= 0)

関連リンク: AskToUpdateLinks = FalseとUpdateLinks:= 0の違い


2

少なくともこの仕事を処理できる一時的な解決策を見つけました。「リンクの更新」ウィンドウが表示されるのを待ち、「更新しない」ボタンをクリックする短いAutoItスクリプトを作成しました。コードは次のとおりです。

while 1
if winexists("Microsoft Excel","This workbook contains links to other data sources.") Then
   controlclick("Microsoft Excel","This workbook contains links to other data sources.",2)
EndIf
WEnd

これまでのところ、これは機能しているようです。ただし、これを完全にVBAにするソリューションを見つけて、スタンドアロンアプリケーションにすることができます。


2

この質問(またはその一部)を解決するためにいくつかの追加の入力を提供したいと思います。

これはExcel、別のファイルを開くときに機能します。Peter L.氏からのコードの行で、変更には以下を使用します。

Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx", UpdateLinks:=3

これはにありMSDSます。結果は、警告なしですべて(はい、すべて)を更新するだけです。これは、マクロを記録する場合にも確認できます。

MSDS、それはこれを参照MS EXCEL 2010して2013MS EXCEL 2016これもカバーされていると思います。

私はMS EXCEL 2013、このトピックとほとんど同じ状況にあります。だから私は常に更新リンクのプロンプトで行き詰まるイベントコードを含むファイル(それを呼び出すA)を持っています。このファイルに接続されている別のファイル(と呼びます)を持っています。ピボットテーブルでは、データモデルをロードできるようにファイルを開く必要があります。ファイルをバックグラウンドでサイレントで開きたいので、上記で書いた行をで使用し、読み込み時間が長くなることを除いて、問題や警告なしにファイルからファイルを開き、完全に更新します。Workbook_OpenBAAWindows("A.xlsx").visible = falseAB

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.