Добрый день. Есть макрос, который выполняет команду "Обновить всё" во всех файлах указанной папки.
Код
Sub OtkritVseKnigi()
'Шаг 1:Объявляем переменные
Dim MyFiles As String
'Шаг 2: Укажите нужную папку
MyFiles = Dir("C:\temp\*.xlx*")
Do While MyFiles <> ""
'Шаг 3: Открываем файлы один за другим
Workbooks.Open "C:\temp\" & MyFiles
'Код макроса с действиями
ActiveWorkbook.RefreshAll
ActiveWorkbook.Close SaveChanges:=True
'Шаг 4: Следующий файл в папке
MyFiles = Dir
Loop
End Sub
Подскажите, пожалуйста, как этот макрос изменить, чтобы папка выбиралась при запуске макроса и файлы обновлялись в фоне.
Нашел такой блок для выбора папки. Но как прикрутить его к макросу не знаю.
Код
Function ShowFolderDialog() As String
Dim oFD As FileDialog
Dim x, lf As Long
'назначаем переменной ссылку на экземпляр диалога
Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
With oFD 'используем короткое обращение к объекту
'так же можно без oFD
'With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Выбрать папку с отчетами" '"заголовок окна диалога
.ButtonName = "Выбрать папку"
.Filters.Clear 'очищаем установленные ранее типы файлов
.InitialFileName = "C:\Temp\" '"назначаем первую папку отображения
.InitialView = msoFileDialogViewLargeIcons 'вид диалогового окна(доступно 9 вариантов)
If oFD.Show = 0 Then Exit Function 'показывает диалог
'цикл по коллекции выбранных в диалоге файлов
x = .SelectedItems(1) 'считываем путь к папке
ShowFolderDialog = x
End With
End Function
Sub OtkritVseKnigi()
Dim MyFiles As String, sFolder As String
sFolder = ShowFolderDialog() & Application.PathSeparator
MyFiles = Dir(sFolder & "*.xls*")
Application.ScreenUpdating = False
Do While MyFiles <> ""
Workbooks.Open sFolder & MyFiles
ActiveWorkbook.RefreshAll
ActiveWorkbook.Close SaveChanges:=True
MyFiles = Dir
Loop
Application.ScreenUpdating = True
MsgBox "Файлы обновлены!", vbInformation, "Конец"
End Sub
Function ShowFolderDialog() As String
Dim oFD As FileDialog
Dim x, lf As Long
'назначаем переменной ссылку на экземпляр диалога
Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
With oFD 'используем короткое обращение к объекту
'так же можно без oFD
'With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Выбрать папку с отчетами" '"заголовок окна диалога
.ButtonName = "Выбрать папку"
.Filters.Clear 'очищаем установленные ранее типы файлов
'.InitialFileName = "C:\Temp\" 'назначаем первую папку отображения
.InitialView = msoFileDialogViewLargeIcons 'вид диалогового окна(доступно 9 вариантов)
If oFD.Show = 0 Then Exit Function 'показывает диалог
'цикл по коллекции выбранных в диалоге файлов
x = .SelectedItems(1) 'считываем путь к папке
ShowFolderDialog = x
End With
End Function