Страницы: 1
RSS
Сохранение книги с новым именем взятым из названия листов книги.
 
Здравствуйте!

Рекомендовали создать новую тему, в форуме и приемах решения не нашел или не понял что это было оно.

Суть проблемы: пере сохранить книгу под новым именем, имя должно собраться из значения определенной ячейки + имя определенного листа в книге (не по имени листа, а по его порядку в книге) + имя последнего созданного листа.

Пример с макросами в приложении.

Задумка такая - имеется начальная книга. В ней лист "база" с базой начальных данных (скрыт) и лист "Исходная форма", который является шаблоном для копирования себе подобных листов.

Пользователь тыкает кнопку "Создать новый лист" - макрос копирует лист "Исходная форма" (в последующем макрос копирует последний созданный лист), и дает ему имя по дате и времени создания.

Пользователь выбирает нужный "ассортимент", вносит кучу разных данных и жмет на кнопку "сохранить".
Книга должна перезаписаться с новым именем, а именно - имя должно состоять из названия выбранного ассортимента, (это значение определенной ячейки) + дата создания первого листа с данными (тот что сразу после шаблона) + дату создания последнего листа с данными.
Таким образом день за днем книга обрастает листами с данными от пользователя.

На диске в итоге имеем данные по определенному ассортименту в виде одного файла, собранные в течении времени,
из которых далее можно будет сделать удобную сводную таблицу и анализировать.

Макросы работают, делают копию, берут данные из нужных ячеек...
...но как заставить макрос вставить в новое имя название нужного листа?

Или это формулой делать в каждом новом листе, как ссылка на тот лист (третий по счету, (учитывая скрытый тоже), но это может быть и второй или пятый - любой, в зависимости от того, какие листы еще будут в исходнике книги, но всегда это будет определенный в порядковом выражении лист).

Для решения напрашиваются два вопроса:
1. или как в формуле прописать ссылку на ячейку в нужном листе книги, имя которого не постоянное (может есть что-то типа не "Лист2", например, а "sekondSheet")?

2. или как прописать макрос, чтобы он брал данные для нового имени книги из значения ячейки + имени нужного + имени последнего листа книги?
 
Как вариант сборки нового имени файла через поиск минимальной и максимальной даты в именах листов:
Код
Dim arr()
x = ThisWorkbook.Sheets.Count
For i = 1 To x
    If Sheets(i).Visible = 0 Or Sheets(i).Visible = 2 _
    Or Sheets(i).Name = "Исходная форма" Then
        x = x - 1
    Else
        ReDim Preserve arr(x - 1)
        arr(k) = CLng(DateValue(Left(Sheets(i).Name, 8)))
        k = k + 1
    End If
Next
y = Format(Application.Min(arr), "DD-MM-YYYY")
Z = Format(Application.Max(arr), "DD-MM-YYYY")
NewName = ActiveWorkbook.ActiveSheet.[a2] & "_" & y & "_" & Z & ".xlsb"
 
GRIM,
интересный вариант,
сейчас испытаю,
спасибо!
 
GRIM,

Аааа!))
Работает!!!
Спасибо большое, надеюсь это решение будет полезно еще кому-то!
 
Не забывайте проверять NewName на допустимые для имени файла символы!
 
Hugo,
спасибо за совет!
Знать бы еще как его применить))
 
Цитата
LAV75 написал:
Знать бы еще как его применить)
- https://excelvba.ru/code/Replace_symbols
 
Ну вроде не сложно,
спасибо!
 
!!!
Изменено: Сергей Халиков - 21.01.2020 12:58:46
Страницы: 1
Наверх