Добрый день! Очень прошу о помощи! Есть макрос, который всем хорош, но работает только отдельном в открытом файле, но очень нужна пакетная обработка, т.к. файлов очень много. Может кто знает как это сделать?
Код
Sub Копия_2()
Sheets(Array("Отчет").Se
lect
Sheets("Отчет".Activate
ActiveWorkbook.SaveAs Filename:= _
"C:\test\result\" & Cells(11, .Value & ".xls", FileFormat:= _
xlNormal, CreateBackup:=False
ActiveWorkbook.UpdateLinks = xlUpdateLinksNever
Sheets("Отчет".Select
Range("A1".Select
Sheets("Отчет".Select
Range("A1".Select
End Sub
Без примера плохо понимаю. Да и некоторые строки вообще непонятно зачем здесь нужны. Мне лично не ясно, зачем несколько раз выделять то лист, то ячейку "А1". Видимо писали рекодером. Ну да хозяин-барин. Если правильно понял, берется значение из ячейки "Н11" и сохраняется файл с таким именем. Тогда можно так. Записывайте все названия в ячейки от "H11" и ниже. Затем пробуйте так:
Код
Sub Копия_2()
Dim sht1 As Worksheet
Dim My_name As String
Sheets(Array("Отчет")).Select
Sheets("Отчет").Activate
Set sht1 = ThisWorkbook.Worksheets("Отчет")
i = 11
Do While sht1.Cells(i, 11) <> ""
My_name = sht1.Cells(i, 11)
ActiveWorkbook.SaveAs Filename:= _
"C:\test\result\" & My_name & ".xls", FileFormat:= _
xlNormal, CreateBackup:=False
ActiveWorkbook.UpdateLinks = xlUpdateLinksNever
Sheets("Отчет").Select
Range("A1").Select
Sheets("Отчет").Select
Range("A1").Select
i = i + 1
Loop
End Sub
Когда испробованы все варианты, я начинаю плясать с бубном. Как правило — помогает.
К сожалению не работает... или я неправильно поняла. И еще каким образом этот макрос может поменять имена нескольких файлов? Я не сильна в макросах, но тут вроде обращение к текущей книге?
Попробуйте объяснить задачу как-то иначе. Как я понял сейчас - Вам нужно наделать кучу копий файлов, изменив их имя на значение Cells(11, непонятно какого файла. Вероятно того же, который копируем. Тогда вероятно этот код должен быть в другом файле, этим кодом перебираем файлы, каждый открываем, читаем Cells(11, , далее сохраняем его под другим именем и закрываем. Я бы вероятно читал с помощью getobject(), запоминал значение Cells(11, , затем закрывал, затем делал копию или переименовывал.
Файлы - это отчеты сотрудников. В ячейке Н11 их ФИО. И копировать их не нужно. Открывать каждый файл, чтобы переименовать нереально. Я уже писала, что мой макрос работает, но для каждого файла отдельно, а мне нужно для группы. Например для всех файлов в папке test. Надеюсь понятно объяснила...
Разместить новую книгу с Sub wwww() в папке с файлами подлежащими переименованию. Создать в этой папке папку "Test_1" для складирования в неё переименованных файлов. Без проверок: на форматы, наличие записей в ячейке "H11" (в т.ч. допустимых для имён), обновления связей.
Код
Sub wwww()
'Application.ScreenUpdating = False
With ThisWorkbook
путь$ = .Path
файл$ = Dir(путь$ & "\*.xls")
Do While файл$ <> "" 'пока есть файлы
If файл$ <> .Name Then 'кроме этого файла
Workbooks.Open Filename:=путь$ & "\" & файл$
With ActiveWorkbook
.SaveAs Filename:= _
ThisWorkbook.Path & "\" & "Test_1" & "\" & _
.Sheets(1).Cells(11, 8) & ".xls", FileFormat:=xlNormal
.Close SaveChanges:=True
End With
' Kill путь$ & "\" & файл$ 'убить старые файлы
End If
файл$ = Dir
Loop
End With
Beep
'Application.ScreenUpdating = True
End Sub
"копировать их не нужно" - ActiveWorkbook.SaveAs делает как раз копию файла, если он уже сохранён. "Открывать каждый файл ... нереально" - иначе Вы не прочитаете Cells(i, 11). Тогда давайте готовьте список - какой файл как переименовывать.
И чего же "открывать нереально" - кодом вполне реально. Пока я писал этот текст - можно было бы уже пару сотен файлов обработать...
Sub Rename_Files()
Dim sFolder As String, sFiles As String, sFileName As String, sNewFileName As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = False Then Exit Sub
sFolder = .SelectedItems(1)
End With
sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
Application.ScreenUpdating = False
sFiles = Dir(sFolder & "*.xls*")
Do While sFiles <> ""
Workbooks.Open sFolder & sFiles
sFileName = sFolder & sFiles
sNewFileName = sFolder & Sheets("Отчет").Range("H11").Value & ".xls"
ActiveWorkbook.Close True
sFiles = Dir
Name sFileName As sNewFileName
Loop
Application.ScreenUpdating = True
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...