Sub SaveAllAsXLSX ()
Dim strFilename As String
Dim strDocName As String
Dim strPath As String
Dim WBK As Workbook
Dim fDialog As FileDialog
Dim IntPos As Integer
Dim strPassword As String
Dim strWritePassword As String
Dim VarA As String
Dim varB As String
Dim colFiles As New Collection
Dim vFile As Variant
Set fDialog = Application.FileDialog (msoFileDialogFolderPicker)
С помощью fDialog
.Title = "Выберите папку и нажмите ОК"
.AllowMultiSelect = True
.InitialView = msoFileDialogViewList
Если .Show -1, то
MsgBox "Отменено пользователем", "Список содержимого папки"
Exit Sub
End If
strPath = fDialog.SelectedItems.Item (1)
Если верно (strPath, 1) "\" Тогда strPath = strPath + "\"
Конец с
Если осталось (strPath, 1) = Chr (34), то
strPath = Mid (strPath, 2, Len (strPath) - 2)
End If
Set obj = CreateObject ("Scripting.FileSystemObject")
RecursiveDir colFiles, strPath, "* .xls", True
Для каждого vFile в colFiles
Debug.Print vFile
strFilename = vFile
varA = Right (strFilename, 3)
Если (varA = "xls" или varA = "XLSX"), то
Set wbk = Workbooks.Open (имя файла: = имя_строки)
Если wbk.HasVBProject, то
Имя файла wbk.SaveAs: = имя_файла & "m", формат файла: = xlOpenXMLWorkbookMacroEnabled
еще
wbk.SaveAs Имя файла: = имя_файла & "x", формат файла: = xlOpenXMLWorkbook
End If
wbk.Close SaveChanges: = False
obj.DeleteFile (strFilename)
End If
Следующий vFile
End Sub
Открытая функция RecursiveDir (colFiles As Collection, _
strFolder As String, _
strFileSpec As String, _
bIncludeSubfolders As Boolean)
Dim strTemp As String
Dim colFolders As New Collection
Dim vFolderName As Variant
'Добавить файлы в strFolder, соответствующие strFileSpec, в colFiles
strFolder = TrailingSlash (strFolder)
strTemp = Dir (strFolder & strFileSpec)
Делай пока strTemp vbNullString
colFiles.Add strFolder & strTemp
strTemp = Dir
петля
Если bIncludeSubfolders То
'Заполнить colFolders списком подкаталогов strFolder
strTemp = Dir (strFolder, vbDirectory)
Делай пока strTemp vbNullString
If (strTemp ".") И (strTemp "..") Тогда
If (GetAttr (strFolder & strTemp) и vbDirectory) 0 Тогда
colFolders.Add strTemp
End If
End If
strTemp = Dir
петля
Вызовите RecursiveDir для каждой подпапки в colFolders
Для каждого vFolderName В colFolders
Вызовите RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True)
Next vFolderName
End If
Конечная функция
Открытая функция TrailingSlash (strFolder As String) как String
Если Лен (strFolder)> 0, то
Если верно (strFolder, 1) = "\" Тогда
TrailingSlash = strFolder
еще
TrailingSlash = strFolder & "\"
End If
End If
Конечная функция