Try this:
Sub Test_2()
Dim vFiles As Variant
Dim v As Variant
Dim MsoAS As MsoAutomationSecurity
Dim Wb As Workbook
Dim strRootFolder As String
Dim oDicNoHighlighted As Object
strRootFolder = GetFolder()
If Len(strRootFolder) = 0 Then Exit Sub
Call ListFiles(strRootFolder, vFiles, "[!~]*.xls*", True)
If IsEmpty(vFiles) Then
Exit Sub
End If
MsoAS = Application.AutomationSecurity
Application.AutomationSecurity = msoAutomationSecurityForceDisable
Application.ScreenUpdating = False
Set oDicNoHighlighted = CreateObject("Scripting.Dictionary")
For Each v In vFiles
Set Wb = Application.Workbooks.Open(v)
With Wb.Worksheets(1)
If .Range("B1").Interior.Color <> 5287936 Then
'or
'If .Range("B1").Interior.ColorIndex <> 14 Then
oDicNoHighlighted.Add v, 0
End If
End With
Wb.Close False
Next v
Application.AutomationSecurity = MsoAS
If oDicNoHighlighted.Count > 0 Then
v = oDicNoHighlighted.Keys()
v = Application.Transpose(v)
With Application.Workbooks.Add(Template:=xlWBATWorksheet)
With .Worksheets(1).Range("A1").Resize(UBound(v))
.Value = v
.EntireColumn.AutoFit
End With
End With
End If
End Sub
Function GetFolder(Optional InitDir As String) As String
Dim fldr As Office.FileDialog
Dim sItem As String
If Len(InitDir) = 0 Then
sItem = CurDir
Else
sItem = InitDir
End If
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a root folder to check"
.AllowMultiSelect = False
If Right(sItem, 1) <> "\" Then
sItem = sItem & "\"
End If
.InitialFileName = sItem
If .Show <> -1 Then
sItem = vbNullString
Else
sItem = .SelectedItems(1)
End If
End With
GetFolder = sItem
Set fldr = Nothing
End Function
Sub ListFiles(ByVal sFolder As String, ByRef varrFiles As Variant, _
Optional sFilter As String, Optional vSubFolders As Variant)
Dim FSO As Object
Dim fsoFolder As Object
Dim fsoSubFolders As Object
Dim fsoSubFolder As Object
Dim fsoFile As Object
Dim i As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(sFolder) Then
Set fsoFolder = FSO.GetFolder(sFolder)
Set fsoSubFolders = fsoFolder.SubFolders
If fsoSubFolders.Count > 0 Then
If IsMissing(vSubFolders) Then
If MsgBox("Include subfolders?", _
vbQuestion + vbYesNo, _
"File list") = vbYes Then
vSubFolders = True
Else
vSubFolders = False
End If
End If
Else
vSubFolders = False
End If 'fsoSubFolders.Count > 0
If Len(sFilter) = 0 Then sFilter = "*.*"
For Each fsoFile In fsoFolder.Files
If UCase(fsoFile.Name) Like UCase(sFilter) Then
If IsEmpty(varrFiles) Then
ReDim varrFiles(1 To 1)
End If
i = UBound(varrFiles)
If IsEmpty(varrFiles(i)) Then
i = i - 1
End If
i = i + 1
ReDim Preserve varrFiles(1 To i)
varrFiles(i) = fsoFile.Path
End If 'UCase(fsoFile.Name) Like UCase(sFilter)
Next fsoFile
If vSubFolders Then
For Each fsoSubFolder In fsoSubFolders
Call ListFiles(fsoSubFolder.Path, varrFiles, sFilter, True)
Next fsoSubFolder
End If 'vSubFolders = True
End If 'FSO.FolderExists(sFolder) = True
Set fsoSubFolders = Nothing
Set fsoFolder = Nothing
Set FSO = Nothing
End Sub
Artik
Bookmarks