Option Explicit
Sub TEST()
Application.ScreenUpdating = False
'Application.DisplayAlerts = False
Dim A, Z, i&, T$, T1$, T2$, F1 As Range, F2 As Range
Set Z = CreateObject("Scripting.Dictionary")
T1 = "另存檔案路徑": T2 = "另存檔案名稱"
For i = 1 To Worksheets.Count
Set F1 = Sheets(i).[1:1].Find(T1, Lookat:=xlWhole)
Set F2 = Sheets(i).[2:2].Find(T2, Lookat:=xlWhole)
If F1 Is Nothing Or F2 Is Nothing Then GoTo i01 Else T = F2(1, 2) & "/S"
If Z(T) <> "" Then MsgBox F2(1, 2) & " 檔名重複,請檢查": Exit Sub
Z(T) = F1(1, 2) & "": Set Z(F2(1, 2) & "") = Sheets(i): Z(F2(1, 2) & "/a") = F1.Address
i01: Next
For Each A In Z.KEYS
If Not IsObject(Z(A)) Then GoTo A01 Else T = Z(A & "/S")
Z(A).Copy: If Dir(T, vbDirectory) = "" Then MkDir T
With ActiveSheet.UsedRange: .Value = .Value: End With
Range(Z(A & "/a")).Resize(2, 2) = ""
With ActiveWorkbook: .SaveAs Filename:=T & "\" & A: .Close: End With
ThisWorkbook.Activate
A01: Next
End Sub
謝謝論壇,謝謝前輩發表此主題與範例檔
後學藉此帖練習字典(檢查檔名重複),學習方案如下,請前輩參考
Option Explicit
Sub TEST()
Application.ScreenUpdating = False
'Application.DisplayAlerts = False
Dim A, Z, i&, T$, T1$, T2$, F1 As Range, F2 As Range
Set Z = CreateObject("Scripting.Dictionary")
T1 = "另存檔案路徑": T2 = "另存檔案名稱"
For i = 1 To Worksheets.Count
Set F1 = Sheets(i).[1:1].Find(T1, Lookat:=xlWhole)
Set F2 = Sheets(i).[2:2].Find(T2, Lookat:=xlWhole)
If F1 Is Nothing Or F2 Is Nothing Then GoTo i01 Else T = F2(1, 2) & "/S"
If Z(T) <> "" Then MsgBox F2(1, 2) & " 檔名重複,請檢查": Exit Sub
Z(T) = F1(1, 2) & "": Set Z(F2(1, 2) & "") = Sheets(i)
i01: Next
For Each A In Z.KEYS
If Not IsObject(Z(A)) Then GoTo A01 Else T = Z(A & "/S")
Z(A).Copy: If Dir(T, vbDirectory) = "" Then MkDir T
With ActiveSheet.UsedRange: .Value = .Value: End With
With ActiveWorkbook: .SaveAs Filename:=T & "\" & A: .Close: End With
ThisWorkbook.Activate
A01: Next
End Sub