Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Создание/копирование множества листов по шаблону/образцу - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создание/копирование множества листов по шаблону/образцу (Макросы/Sub)
Создание/копирование множества листов по шаблону/образцу
Didrou Дата: Четверг, 18.02.2016, 09:43 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Доброе время суток!
Прошу помочь с решением задачки. В приложенном файле необходимо скопировать лист "Образец" n-ое количество раз с присвоением имён по порядку от a до b, где a = начальная дата, b = конечная дата.

Пример:

Исходные листы:
"Содержание", "Источник", "Образец" (как в приложенном файле).

Вводим значение переменных:
a = 27 декабря 2015, b = 4 января 2016 (макрос привязанный к отдельной кнопке на странице "Содержание". Переменные заносятся в ячейки около кнопки вручную или всплывающим списком или в окошке, любой способ на выбор доброго помощника).

Получаем листы:
"Содержание", "Источник", "Образец", "27 декабря 2015", "28 декабря 2015", "29 декабря 2015", "30 декабря 2015", "31 декабря 2015", "1 января 2016", "2 января 2016", "3 января 2016", "4 января 2016" (формат имени добавляемых листов не обязателен как в примере, пойдёт любой, но чтобы было понятно какое число, месяц, год).

Желательно учитывать количество дней в месяце согласно календарю. Временной промежуток может быть и пол года, переходя из одного в другой год.
К сообщению приложен файл: 001.xlsm(54Kb)


Сообщение отредактировал Didrou - Четверг, 18.02.2016, 09:44
 
Ответить
СообщениеДоброе время суток!
Прошу помочь с решением задачки. В приложенном файле необходимо скопировать лист "Образец" n-ое количество раз с присвоением имён по порядку от a до b, где a = начальная дата, b = конечная дата.

Пример:

Исходные листы:
"Содержание", "Источник", "Образец" (как в приложенном файле).

Вводим значение переменных:
a = 27 декабря 2015, b = 4 января 2016 (макрос привязанный к отдельной кнопке на странице "Содержание". Переменные заносятся в ячейки около кнопки вручную или всплывающим списком или в окошке, любой способ на выбор доброго помощника).

Получаем листы:
"Содержание", "Источник", "Образец", "27 декабря 2015", "28 декабря 2015", "29 декабря 2015", "30 декабря 2015", "31 декабря 2015", "1 января 2016", "2 января 2016", "3 января 2016", "4 января 2016" (формат имени добавляемых листов не обязателен как в примере, пойдёт любой, но чтобы было понятно какое число, месяц, год).

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

Автор - Didrou
Дата добавления - 18.02.2016 в 09:43
Karataev Дата: Четверг, 18.02.2016, 11:45 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 643
Репутация: 227 ±
Замечаний: 0% ±

Excel
Макрос запускается из листа "Содержание", кнопкой, которая находится в D7.
В ячейки D9, D10 нужно записать даты.
Сам макрос находится в модуле "CreateSheets".
К сообщению приложен файл: 001_v2.xlsm(42Kb)


 
Ответить
СообщениеМакрос запускается из листа "Содержание", кнопкой, которая находится в D7.
В ячейки D9, D10 нужно записать даты.
Сам макрос находится в модуле "CreateSheets".

Автор - Karataev
Дата добавления - 18.02.2016 в 11:45
Kuzmich Дата: Четверг, 18.02.2016, 12:25 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 216
Репутация: 40 ±
Замечаний: 0% ±

Excel 2003
На листе Содержание в ячейке А5 - начальная дата, в А6 - конечная
[vba]
Код

Sub CopyObraz()
Dim iNameSheet As String
Dim iCount As Long
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
      iNameSheet = Range("A5")
      iCount = Range("A5").Value
    Do
      If Not SheetExist(iNameSheet) Then
        Sheets("образец").copy After:=Sheets(Sheets.Count)
          Sheets(Sheets.Count).Name = iNameSheet
      End If
        iCount = iCount + 1
        iNameSheet = CDate(iCount)
    Loop While iCount <> Range("A6").Value + 1
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
'функция проверки наличия листа в файле, лист есть - true
Function SheetExist(iName As String) As Boolean
    On Error Resume Next
    With Worksheets(iName): End With
    SheetExist = (Err = 0)
End Function
[/vba]
 
Ответить
СообщениеНа листе Содержание в ячейке А5 - начальная дата, в А6 - конечная
[vba]
Код

Sub CopyObraz()
Dim iNameSheet As String
Dim iCount As Long
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
      iNameSheet = Range("A5")
      iCount = Range("A5").Value
    Do
      If Not SheetExist(iNameSheet) Then
        Sheets("образец").copy After:=Sheets(Sheets.Count)
          Sheets(Sheets.Count).Name = iNameSheet
      End If
        iCount = iCount + 1
        iNameSheet = CDate(iCount)
    Loop While iCount <> Range("A6").Value + 1
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
'функция проверки наличия листа в файле, лист есть - true
Function SheetExist(iName As String) As Boolean
    On Error Resume Next
    With Worksheets(iName): End With
    SheetExist = (Err = 0)
End Function
[/vba]

Автор - Kuzmich
Дата добавления - 18.02.2016 в 12:25
Didrou Дата: Четверг, 18.02.2016, 13:21 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Karataev, работает как надо, спасибо!
Kuzmich, бесконечный висяк, может что не так сделал с твоим макросом, выложил для проверки.
К сообщению приложен файл: 1112908.xlsm(57Kb)
 
Ответить
СообщениеKarataev, работает как надо, спасибо!
Kuzmich, бесконечный висяк, может что не так сделал с твоим макросом, выложил для проверки.

Автор - Didrou
Дата добавления - 18.02.2016 в 13:21
Kuzmich Дата: Четверг, 18.02.2016, 14:13 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 216
Репутация: 40 ±
Замечаний: 0% ±

Excel 2003
Цитата
что не так сделал

Я макрос располагал в модуле листа "Содержание"
Лист у вас называется "образец", а в коде вы написали почему-то с большой буквы.
Если код будет в стандартном модуле, то добавьте в код явно
[vba]
Код

    iNameSheet = Sheets("Содержание").Range("A5")
    iCount = Sheets("Содержание").Range("A5").Value
..............................
    Loop While iCount <> Sheets("Содержание").Range("A6").Value + 1

[/vba]
Удачи!
 
Ответить
Сообщение
Цитата
что не так сделал

Я макрос располагал в модуле листа "Содержание"
Лист у вас называется "образец", а в коде вы написали почему-то с большой буквы.
Если код будет в стандартном модуле, то добавьте в код явно
[vba]
Код

    iNameSheet = Sheets("Содержание").Range("A5")
    iCount = Sheets("Содержание").Range("A5").Value
..............................
    Loop While iCount <> Sheets("Содержание").Range("A6").Value + 1

[/vba]
Удачи!

Автор - Kuzmich
Дата добавления - 18.02.2016 в 14:13
Didrou Дата: Четверг, 18.02.2016, 14:44 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 23
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Все понятно, Kuzmich, спасибо.
 
Ответить
СообщениеВсе понятно, Kuzmich, спасибо.

Автор - Didrou
Дата добавления - 18.02.2016 в 14:44
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создание/копирование множества листов по шаблону/образцу (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!