web-dev-qa-db-ja.com

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

私は多くの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

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

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

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

94
sigil

私は少なくともこの仕事を処理させる一時的な解決策を見つけました。私は「リンクを更新」ウィンドウが表示されるのを待ってから「更新しない」ボタンをクリックする短い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
sigil

PDATE:

すべての詳細を要約して説明した後、私はオプションをチェックするのに2時間を費やしました、そしてこのアップデートはすべてのisをドットすることです。

準備

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

それから、私は以下のExcelオプションだけを変更しました(すなわち、他のすべてはインストール後にそのまま残ります)。

  • Advanced > General > Ask to update automatic linkschecked

Ask to update automatic links

  • Trust Center > Trust Center Settings... > External Content > Enable All...(ただし、Data Connectionsに関連するものは、この場合には重要ではないと考えられます)。

External Content

前提条件

私は彼の更新された答えの中のC:\提案通りにワークブックを@Siddharth Rout作成するよう準備しました(あなたの便宜のために共有しています): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx リンクブックそのときdeletedなので共有ブックのリンクは利用できません(確かに)。

手動で開く

上記の共有ファイルは、開いたときに表示されます(上記のExcelオプションを使用)2つの警告 - 表示順に:

WARNING#1

This workbook contains links to other data sources

Updateをクリックした後、私は別のものを手に入れました:

WARNING#2

This workbook contains one or more links that cannot be updated

それで、私のテスト環境は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

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

。 Application.AskToUpdateLinks = False

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

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

4。 Double False

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

どうやら、このコードはBOTH WARNINGSを抑制することになった。

5。 UpdateLinks:= False

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

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

結論

良いテスト方法と非常に重要な解決されたケース(私のワークブックを第三者に送っている間、毎日私はそのような問題に直面するかもしれません、そして今私は準備ができています)を除いて、2つのことが学びました:

  1. Excelのオプションは、バージョンに関係なく、特にVBAソリューションを使用する場合には重要です。
  2. すべての問題は、短くてエレガントな解決策を持っています - 明白で複雑ではない解決策と共に。そのためのもう1つの証拠!)

このソリューションに貢献してくれたすべての人、特に問題を提起したOPに感謝します。私の調査と徹底的に記述されたテストステップが私にとってだけではなかったことを願っています)

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

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

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

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

122
Peter L.

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

Application.AskToUpdateLinks = False 

Excelを閉じてファイルを開きます。それは二度とあなたを促しません。ワークブックを閉じるときにリセットするのを忘れないでください。そうしないと、他のワークブックでも機能しません。

スクリーンショット

enter image description here

EDIT

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

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.xlsxおよびSample2.xlsxと名付け、それらをC:\に保存します
  2. A1のセルSample1.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
21
Siddharth Rout

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

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

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

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

4
user2060451

この質問(またはその一部)を解決する際に、何か特別な情報を提供してください。

これはExcelファイルを他のファイルから開くのに役立ちます。 氏からのコード行。 Peter L。、変更には以下を使用してください。

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

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

MSDSでは、これをMS Excel 2010および2013と呼びます。 MS Excel 2016にもこれが含まれていると思います。

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

1
JDF

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

Application.AskToUpdateLinks = Falseはおそらくあなたが望むものではありません。

Falseに設定すると、MS Excel will自動的にリンクを更新しようとしますが、ユーザーに事前にプロンプ​​トを表示しません。直感的にはわかりにくいでしょう。

もしあなたがファイルを開くことを考えているのであれば正しい解決策withoutリンクの更新は:

Workbook.Open(UpdateLinks:= 0)

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

0
Donaldo Almazan