Sub ディレクトリのすべてのExcelファイルの外部リンクを解除()
Dim ファイルパス As String
Dim 検索フォルダ As String
Dim fs As Object
Dim 外部リンク解除状況 As String
' 処理対象のディレクトリを指定(手動で変更)
検索フォルダ = "C:\対象のディレクトリ\"
' ファイルシステムオブジェクトを初期化
Set fs = CreateObject("Scripting.FileSystemObject")
' 外部リンク解除状況を初期化
外部リンク解除状況 = "外部リンク解除状況:" & vbNewLine
' 自動更新や警告メッセージの抑制
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
Application.EnableEvents = False
' 再帰的に探索し、外部リンクを解除
Call 探索とリンク解除(fs.GetFolder(検索フォルダ), 外部リンク解除状況)
' 自動更新や警告メッセージの設定を戻す
Application.DisplayAlerts = True
Application.AskToUpdateLinks = True
Application.EnableEvents = True
' 結果をコンソール(イミディエイトウィンドウ)に表示
Debug.Print 外部リンク解除状況
MsgBox "処理が完了しました。結果はイミディエイトウィンドウで確認してください。", vbInformation
End Sub
Private Sub 探索とリンク解除(フォルダ As Object, ByRef 外部リンク解除状況 As String)
Dim ファイル As Object
Dim サブフォルダ As Object
Dim wb As Workbook
Dim 外部リンク As Variant
Dim ファイルパス As String
Dim ファイル名 As String
Dim リンク解除されたか As Boolean
' フォルダ内のすべてのExcelファイルを探索
For Each ファイル In フォルダ.Files
ファイル名 = ファイル.Name
ファイルパス = ファイル.Path
' ファイル名に「あいうえお」が含まれる場合はスキップ
If ファイル名 Like "*[あいうえお]*" Then
' スキップした場合は何も出力しない
GoTo 次のファイル
End If
リンク解除されたか = False
' ファイルをポップアップなしで開く(ReadOnlyでリンク更新しない)
On Error Resume Next
Set wb = Workbooks.Open(Filename:=ファイルパス, ReadOnly:=True, UpdateLinks:=False)
On Error GoTo 0
If Not wb Is Nothing Then
' 外部リンクをチェック
外部リンク = wb.LinkSources(Type:=xlLinkTypeExcelLinks)
If Not IsEmpty(外部リンク) Then
リンク解除されたか = True
' 外部リンクをすべて解除
Dim i As Integer
For i = LBound(外部リンク) To UBound(外部リンク)
wb.BreakLink Name:=外部リンク(i), Type:=xlLinkTypeExcelLinks
Next i
End If
' ブックを保存せずに閉じる
wb.Close SaveChanges:=False
Set wb = Nothing
End If
' 結果を記録
If リンク解除されたか Then
外部リンク解除状況 = 外部リンク解除状況 & ファイルパス & " - 外部リンクを解除しました" & vbNewLine
Else
外部リンク解除状況 = 外部リンク解除状況 & ファイルパス & " - 外部リンクはありません" & vbNewLine
End If
次のファイル:
Next ファイル
' サブフォルダを再帰的に探索
For Each サブフォルダ In フォルダ.SubFolders
Call 探索とリンク解除(サブフォルダ, 外部リンク解除状況)
Next サブフォルダ
End Sub