119

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

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

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

また、Excel2010を使用しています。

4

8 に答える 8

152

アップデート:

すべての詳細を要約して説明した後、オプションの確認に 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's)にかなり似ていると思います)

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)、それ以上の警告は生成されません。つまり、 WARNING #2Application.DisplayAlerts = Falseが抑制されます。

3. Application.AskToUpdateLinks = False

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

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

4.ダブルフォールス

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 と同じように機能します:警告は表示されません!

結論

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

  1. Excel のオプションは、バージョンに関係なく重要です。特に VBA ソリューションの場合は重要です。
  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

于 2013-02-16T08:45:29.643 に答える
27

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

Application.AskToUpdateLinks = False 

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

スクリーンショット:

ここに画像の説明を入力

編集

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

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. のセル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
于 2013-02-16T08:41:05.360 に答える
5

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

 Private Sub Workbook_Open()
    ' Suppress dialog & update automatically without asking
    Application.AskToUpdateLinks = False
End Sub
于 2013-05-17T00:06:58.477 に答える
2

この質問(またはその一部)を解決するために、追加の情報を提供してください。

これは、別のファイルからファイルを開く場合にExcel機能します。Mr. Peter L.からのコード行では、変更のために次を使用します。

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

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

ではMSDS、これをMS EXCEL 2010および と呼び2013ます。MS EXCEL 2016これもカバーしていると思います。

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

于 2015-11-19T13:26:35.903 に答える
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 のソリューションを見つけたいと思っています。

于 2013-02-16T18:43:46.727 に答える
0

この会話の注意点として。リンクの更新通知を削除するには、workbook_open() 内で次のようにします。

Private Sub workbook_Open()
Application.ThisWorkbook.UpdateLinks = xlUpdateLinksNever 
#Your code goes here
Application.ThisWorkbook.UpdateLinks = xlUpdateLinksAlways
End Sub
于 2022-01-05T11:52:39.003 に答える