Доброго времени суток. Существует задача сохранить лист в отдельный файл. Об этом уже много написано, я пытаюсь это воплотить, но почему то не получается. Вот собственно тот макрос:
Код
Sub СохранитьЛистВФайл()
On Error Resume Next
Const REPORTS_FOLDER = "Отчёты\"
MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
Filename = [i6] & [j6] & ".xlsx"
arr = ActiveSheet.UsedRange.Value
Err.Clear: ActiveSheet.Copy: DoEvents
If Err Then Exit Sub
If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then
ActiveSheet.UsedRange.Value = arr
ActiveWorkbook.SaveAs Filename, xlOpenXMLWorkbook
ActiveWorkbook.Close False
End If
End Sub
а если я не привязываю название файла к ячейкам - с выплыванием окошка для SaveAs, то все получается...подскажите где здесь ошибка и что нужно подправить...
а зачем вы копируете в массив, потом копируете лист, потом массив опять на лист?
не проще или просто создать новую книгу с одним листом и выгрузить туда массив или скопировать лист и заменить в нем на значения, без промежуточного массива..
Нет, вся беда была в значениях тех двух ячеек - можно конечно добавить в код автоматическую замену всяких "левых" символов например на "_" перед формированием пути для сохранения, а можно просто вручную недопускать таких данных в ячейках.
==============================================================
Замена запрещённых символов в имени файла или папки
Обработка файлов Примеры макросов на VBA для Excel
При попытке сохранить файл под именем, заданным пользователем, вы можете получить ошибку - если в имени файла (папки) присутствуют запрещённые символы.
Этого легко избежать, если в процессе формирования имени файла удалить из него недопустимые символы, заменив их символом подчёркивания:
Function Replace_symbols(ByVal txt As String) As String
St$ = "~!@#$%^&*=|`'"""
For i% = 1 To Len(St$)
txt = Replace(txt, Mid(St$, i, 1), "_")
Next
Replace_symbols = txt
End Function
Пример использования:
' формируем путь к новому файлу
Путь = ThisWorkbook.Path & "\" & Replace_symbols(sh.Name) & _
"\" & Replace_symbols(cell) & "\" & Replace_symbols(cell.Next) & ".jpg"
==============================================================
Тут бы конечно ещё и слэши нужно в список добавить.