私は多くの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を使用しています。
私は少なくともこの仕事を処理させる一時的な解決策を見つけました。私は「リンクを更新」ウィンドウが表示されるのを待ってから「更新しない」ボタンをクリックする短い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である解決策を見つけたいです。
PDATE:
すべての詳細を要約して説明した後、私はオプションをチェックするのに2時間を費やしました、そしてこのアップデートはすべてのi
sをドットすることです。
まず最初に、VMWareを搭載したClean Win7 SP1 Ultimate x64仮想マシンにOffice 2010 x86のクリーンインストールを実行しました(これは日常のテスト作業では通常の作業ですので、それらの多くを展開しています)。
それから、私は以下のExcelオプションだけを変更しました(すなわち、他のすべてはインストール後にそのまま残ります)。
Advanced > General > Ask to update automatic links
checked:Trust Center > Trust Center Settings... > External Content > Enable All...
(ただし、Data Connectionsに関連するものは、この場合には重要ではないと考えられます)。私は彼の更新された答えの中のC:\
提案通りにワークブックを@Siddharth Rout
作成するよう準備しました(あなたの便宜のために共有しています): https://www.dropbox.com/s/mv88vyc27eljqaq/Book1withLinkToBook2.xlsx リンクブックそのときdeletedなので共有ブックのリンクは利用できません(確かに)。
上記の共有ファイルは、開いたときに表示されます(上記のExcelオプションを使用)2つの警告 - 表示順に:
WARNING#1
Update
をクリックした後、私は別のものを手に入れました:
WARNING#2
それで、私のテスト環境はOP
にとてもよく似ていると思います。
今、私は絵を明確にするために段階的にすべての可能なオプションを試してみます。わかりやすくするために、関連するコード行のみを共有します(最後に、コードを含む完全なサンプルファイルを共有します)。
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 = False
はWARNING#2を抑制します。
。 Application.AskToUpdateLinks = False
Application.AskToUpdateLinks = False
Application.Workbooks.Open Filename:="C:\Book1withLinkToBook2.xlsx"
Application.AskToUpdateLinks = True
DisplayAlerts
とは反対に、このコードはWARNING#2のみで終わります。つまり、Application.AskToUpdateLinks = False
はWARNING#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つのことが学びました:
このソリューションに貢献してくれたすべての人、特に問題を提起した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
ExcelのVBAエディタを開き、イミディエイトウィンドウにこれを入力します(スクリーンショットを参照)。
Application.AskToUpdateLinks = False
Excelを閉じてファイルを開きます。それは二度とあなたを促しません。ワークブックを閉じるときにリセットするのを忘れないでください。そうしないと、他のワークブックでも機能しません。
スクリーンショット:
EDIT
コードに適用すると、コードは次のようになります。
Function getWorkbook(bkPath As String) As Workbook
Application.AskToUpdateLinks = False
Set getWorkbook = Workbooks.Open(bkPath, False)
Application.AskToUpdateLinks = True
End Function
フォローアップ
Sigil、下記のコードはリンク切れのあるファイルでも動作します。これが私のテストコードです。
試験条件
Sample1.xlsx
およびSample2.xlsx
と名付け、それらをC:\
に保存しますA1
のセルSample1.xlsx
に、この式を入力してください='C:\[Sample2.xlsx]Sheet1'!$A$1
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
私のワークブックを手動で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
Excel 2016ワークブック/ファイルを作成して名前を変更したときに同じような問題が発生しましたが、どういうわけか古いワークブック名が保持されました。たくさんのグーグルの後で…えーと、そこには最終的な答えが見つかりませんでした….
[データ] - > [リンクの編集] - > [スタートアッププロンプト](下部)に移動して、最適なオプションを選択します。
この質問(またはその一部)を解決する際に、何か特別な情報を提供してください。
これは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
ファイルを問題なくまたは警告なしで開きます。 、そして完全に更新されました。
(コメントを追加するのに十分な担当者がいませんが、ここで回答を明確にしたいと思います)
Application.AskToUpdateLinks = Falseはおそらくあなたが望むものではありません。
Falseに設定すると、MS Excel will自動的にリンクを更新しようとしますが、ユーザーに事前にプロンプトを表示しません。直感的にはわかりにくいでしょう。
もしあなたがファイルを開くことを考えているのであれば正しい解決策withoutリンクの更新は:
Workbook.Open(UpdateLinks:= 0)