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

Вход

Регистрация

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

 

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

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_, DrMini  
Создание отчета по шаблону из таблицы по условию
Valeriy89 Дата: Пятница, 18.12.2015, 00:26 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Доброго времени суток!

Потихоньку вникаю в тонкости VBA, но столкнулся со следующей задачей:

Есть таблица, которая содержит работы по месяцам, не в каждом месяце есть работы по машинам (те присутствуют пустые ячейки), хочу домучать макрос который бы открывал шаблон плана работ на месяц-вносил туда в соседние ячейки "вид работ"(1ячейка) и "Тип машины" (2ячейка), затем создавал новый файл в новой папке расположения файла.(с этим проще-разобрался как)

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

- Форма фиксированная, в принципе могу сам создать слева новый скрытый(можно сгруппировать) столбец в котором пропишу машины, чтобы поиск был по нему, возможно это будет полезно, но не уверен.
В примере прикладываю часть таблицы и примерный шаблон, заранее благодарен за любую помощь!
 
Ответить
СообщениеДоброго времени суток!

Потихоньку вникаю в тонкости VBA, но столкнулся со следующей задачей:

Есть таблица, которая содержит работы по месяцам, не в каждом месяце есть работы по машинам (те присутствуют пустые ячейки), хочу домучать макрос который бы открывал шаблон плана работ на месяц-вносил туда в соседние ячейки "вид работ"(1ячейка) и "Тип машины" (2ячейка), затем создавал новый файл в новой папке расположения файла.(с этим проще-разобрался как)

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

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

Автор - Valeriy89
Дата добавления - 18.12.2015 в 00:26
Kuzmich Дата: Пятница, 18.12.2015, 00:41 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Цитата
В примере прикладываю часть таблицы и примерный шаблон

И где он?
 
Ответить
Сообщение
Цитата
В примере прикладываю часть таблицы и примерный шаблон

И где он?

Автор - Kuzmich
Дата добавления - 18.12.2015 в 00:41
Valeriy89 Дата: Пятница, 18.12.2015, 00:56 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Kuzmich, не загрузился почему-то, прошу прощения!)
К сообщению приложен файл: 6538546.xlsx (13.3 Kb)
 
Ответить
СообщениеKuzmich, не загрузился почему-то, прошу прощения!)

Автор - Valeriy89
Дата добавления - 18.12.2015 в 00:56
Kuzmich Дата: Пятница, 18.12.2015, 16:33 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Цитата
благодарен за любую помощь!

Во-первых, избавиться от объединенных ячеек
Цитата
хочу домучать макрос

И где он?
В плане_работ_шаблон есть наименования работ, а по какой машине они проводились?
 
Ответить
Сообщение
Цитата
благодарен за любую помощь!

Во-первых, избавиться от объединенных ячеек
Цитата
хочу домучать макрос

И где он?
В плане_работ_шаблон есть наименования работ, а по какой машине они проводились?

Автор - Kuzmich
Дата добавления - 18.12.2015 в 16:33
Valeriy89 Дата: Пятница, 18.12.2015, 21:57 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Kuzmich, Наименование работ состоит из 2-х столбцов , в одном вносятся вид работ, а рядом соответствующий тип машины, т.е. за январь на лист план_работ_шаблон в ячейку b6 будет внесена запись ТО-2 (из столбца январь), а в ячейку с6 запись LC 200 112 (из первого столбца, который я создам отдельно и пропишу в нем наименование машин, который будет соответствовать объединенным ячейкам в столбце Е листа график) и т.д., т.е. будет формироваться в столбце наименование работ фраза "ТО-2 LC 200 112".
Цельного макроса нет, есть куски по функциям, а именно переноса столбцов и удаления пустых строк, нумерации строк и заполнения фамилии нет, тяжело у меня с циклами к сожалению)
 
Ответить
СообщениеKuzmich, Наименование работ состоит из 2-х столбцов , в одном вносятся вид работ, а рядом соответствующий тип машины, т.е. за январь на лист план_работ_шаблон в ячейку b6 будет внесена запись ТО-2 (из столбца январь), а в ячейку с6 запись LC 200 112 (из первого столбца, который я создам отдельно и пропишу в нем наименование машин, который будет соответствовать объединенным ячейкам в столбце Е листа график) и т.д., т.е. будет формироваться в столбце наименование работ фраза "ТО-2 LC 200 112".
Цельного макроса нет, есть куски по функциям, а именно переноса столбцов и удаления пустых строк, нумерации строк и заполнения фамилии нет, тяжело у меня с циклами к сожалению)

Автор - Valeriy89
Дата добавления - 18.12.2015 в 21:57
Kuzmich Дата: Пятница, 18.12.2015, 22:11 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Зачем вам создавать новый файл, когда можно в этой же книге для отчетов создать листы с названиями
месяцев: январь, февраль, ...., декабрь. Написание такое же как на листе график. Тогда при внесении в график
каких-либо данных за определенный месяц, их можно переносить в соответствующий лист, будет отчет за
каждый месяц.
 
Ответить
СообщениеЗачем вам создавать новый файл, когда можно в этой же книге для отчетов создать листы с названиями
месяцев: январь, февраль, ...., декабрь. Написание такое же как на листе график. Тогда при внесении в график
каких-либо данных за определенный месяц, их можно переносить в соответствующий лист, будет отчет за
каждый месяц.

Автор - Kuzmich
Дата добавления - 18.12.2015 в 22:11
Valeriy89 Дата: Пятница, 18.12.2015, 22:47 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Kuzmich, Можно и в этой же книге, главная сложность вывода информации по столцбам и удалении пустых строк в отчете
 
Ответить
СообщениеKuzmich, Можно и в этой же книге, главная сложность вывода информации по столцбам и удалении пустых строк в отчете

Автор - Valeriy89
Дата добавления - 18.12.2015 в 22:47
Kuzmich Дата: Пятница, 18.12.2015, 23:07 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Посмотрите пример, я там создал лист январь. При внесении ТО на лист График
в столбец с январем, данные автоматически переносятся на лист "январь"
К сообщению приложен файл: 1270646.xls (45.5 Kb)
 
Ответить
СообщениеПосмотрите пример, я там создал лист январь. При внесении ТО на лист График
в столбец с январем, данные автоматически переносятся на лист "январь"

Автор - Kuzmich
Дата добавления - 18.12.2015 в 23:07
Valeriy89 Дата: Пятница, 18.12.2015, 23:29 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Kuzmich, добавлять он добавляет, а как сделать, чтобы он скажем так заново заполнял строки?
Сейчас при внесении изменений в график в план работ январь заносятся работы, но те что уже были внесены не удаляются, если они были изменены или удалены
Т.е. сейчас добавляются все изменения как в накопительный список
 
Ответить
СообщениеKuzmich, добавлять он добавляет, а как сделать, чтобы он скажем так заново заполнял строки?
Сейчас при внесении изменений в график в план работ январь заносятся работы, но те что уже были внесены не удаляются, если они были изменены или удалены
Т.е. сейчас добавляются все изменения как в накопительный список

Автор - Valeriy89
Дата добавления - 18.12.2015 в 23:29
Valeriy89 Дата: Пятница, 18.12.2015, 23:32 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Kuzmich, И как занести данный макрос например на кнопку
Почему-то ругается эксель, я так понимаю Private Sub Worksheet_Change(ByVal Target As Range) это не просто название Suba?)
 
Ответить
СообщениеKuzmich, И как занести данный макрос например на кнопку
Почему-то ругается эксель, я так понимаю Private Sub Worksheet_Change(ByVal Target As Range) это не просто название Suba?)

Автор - Valeriy89
Дата добавления - 18.12.2015 в 23:32
Kuzmich Дата: Пятница, 18.12.2015, 23:49 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Цитата
я так понимаю Private Sub Worksheet_Change(ByVal Target As Range)

Это макрос на событие изменения листа.
Можно просто привязать к кнопке. Вы опишите, что вы желаете видеть в отчете январь?
Можно внести данные на лист График, нажать кнопочку и перенести все данные по январю.
Что дальше делать с данными на листе График?
 
Ответить
Сообщение
Цитата
я так понимаю Private Sub Worksheet_Change(ByVal Target As Range)

Это макрос на событие изменения листа.
Можно просто привязать к кнопке. Вы опишите, что вы желаете видеть в отчете январь?
Можно внести данные на лист График, нажать кнопочку и перенести все данные по январю.
Что дальше делать с данными на листе График?

Автор - Kuzmich
Дата добавления - 18.12.2015 в 23:49
Valeriy89 Дата: Суббота, 19.12.2015, 00:15 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Kuzmich, если подробнее, в примере график - это кусок из большого файла, машины это для примера (у меня огромный перечень оборудования, на котором проводят ТО), в моем файле (на большом графике я реализовал макрос создания акта о проведении ТО-в шаблон в той же книге у меня заносятся данные из формы, создается папка в расположении книги с определенным именем, т.е. сократил себе времязатраты на типовую задачу) хотел бы реализовать форму с кнопками январь, февраль и т.д. (или списком), при нажатии на которую будет формироваться план работ по шаблону (аналогично актам).
В общем хочу иметь следующее:
1. форму в которой я выбираю месяц (или проще нажимаю на кнопку с месяцем) и формируется новый документ по шаблону в тойже папке
2. хотел бы универсальную форму макроса, чтобы например при удалении в графике оборудования или наоборот увеличении его количества макрос так же корректно работал (т.е. без жесткой привязки диапозона таблицы)
3. Чтобы в создаваемом файле после внесения всех работ вставлялась фраза "Должность ____место подписи______ ФИО" - через наприимер пару строчек.
А по созданию листов в той же книге с планами на месяц: в файле будет очень много листов, поэтому будет усложнен поиск нужного листа.
Возможно сумбур, но бьюсь, ищу в интернете куски кода, но не могу добиться итога.
 
Ответить
СообщениеKuzmich, если подробнее, в примере график - это кусок из большого файла, машины это для примера (у меня огромный перечень оборудования, на котором проводят ТО), в моем файле (на большом графике я реализовал макрос создания акта о проведении ТО-в шаблон в той же книге у меня заносятся данные из формы, создается папка в расположении книги с определенным именем, т.е. сократил себе времязатраты на типовую задачу) хотел бы реализовать форму с кнопками январь, февраль и т.д. (или списком), при нажатии на которую будет формироваться план работ по шаблону (аналогично актам).
В общем хочу иметь следующее:
1. форму в которой я выбираю месяц (или проще нажимаю на кнопку с месяцем) и формируется новый документ по шаблону в тойже папке
2. хотел бы универсальную форму макроса, чтобы например при удалении в графике оборудования или наоборот увеличении его количества макрос так же корректно работал (т.е. без жесткой привязки диапозона таблицы)
3. Чтобы в создаваемом файле после внесения всех работ вставлялась фраза "Должность ____место подписи______ ФИО" - через наприимер пару строчек.
А по созданию листов в той же книге с планами на месяц: в файле будет очень много листов, поэтому будет усложнен поиск нужного листа.
Возможно сумбур, но бьюсь, ищу в интернете куски кода, но не могу добиться итога.

Автор - Valeriy89
Дата добавления - 19.12.2015 в 00:15
Valeriy89 Дата: Суббота, 19.12.2015, 00:18 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Kuzmich, если вместо Private Sub Worksheet_Change(ByVal Target As Range) вставить в макрос Private Sub CommandButton21_Click(), пишет ошибку Compile Error Variable not defined
 
Ответить
СообщениеKuzmich, если вместо Private Sub Worksheet_Change(ByVal Target As Range) вставить в макрос Private Sub CommandButton21_Click(), пишет ошибку Compile Error Variable not defined

Автор - Valeriy89
Дата добавления - 19.12.2015 в 00:18
Kuzmich Дата: Суббота, 19.12.2015, 00:37 | Сообщение № 14
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Цитата
пишет ошибку Compile Error Variable not defined

В моем макросе переменная определена в названии процедуры (ByVal Target As Range)
Если делать через кнопку CommandButton21_Click(), то переменную надо определять в
коде макроса, ну и надо менять алгоритм работы, т.к. Target - это была ячейка, в которую
вносилось значение ТО (столбец где январь). Чтобы не рассуждать абстрактно, приведите
пример с реальной структурой листа График.
 
Ответить
Сообщение
Цитата
пишет ошибку Compile Error Variable not defined

В моем макросе переменная определена в названии процедуры (ByVal Target As Range)
Если делать через кнопку CommandButton21_Click(), то переменную надо определять в
коде макроса, ну и надо менять алгоритм работы, т.к. Target - это была ячейка, в которую
вносилось значение ТО (столбец где январь). Чтобы не рассуждать абстрактно, приведите
пример с реальной структурой листа График.

Автор - Kuzmich
Дата добавления - 19.12.2015 в 00:37
Kuzmich Дата: Суббота, 19.12.2015, 01:05 | Сообщение № 15
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Цитата
а как сделать, чтобы он скажем так заново заполнял строки?

Попробуйте вставить такой макрос вместо предыдущего
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
If Not Intersect(Target, Range("E9:P24")) Is Nothing Then
    Dim iMonth As String
    Dim i As Integer
    Dim iLastRow As Integer
    Dim iLastRowГрафик As Integer
      iMonth = Cells(8, Target.Column)
       iLastRowГрафик = Cells(Rows.Count, 4).End(xlUp).Row + 1
  With Sheets(iMonth)
    iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    If iLastRow > 5 Then
       .Range(.Cells(5, 1), .Cells(iLastRow, 5)).ClearContents
    End If
    For i = 9 To iLastRowГрафик
      If Not IsEmpty(Cells(i, 5)) Then
        iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        If iLastRow = 5 Then
            .Cells(5, 1) = 1
        Else
            .Cells(iLastRow, 1) = .Cells(iLastRow - 1, 1) + 1
        End If
          .Cells(iLastRow, 2) = Cells(i, 5)
          .Cells(iLastRow, 3) = Cells(i, 4)
          .Cells(iLastRow, 4) = "Иванов И.И."
      End If
    Next
  End With
End If
End Sub
[/vba]
 
Ответить
Сообщение
Цитата
а как сделать, чтобы он скажем так заново заполнял строки?

Попробуйте вставить такой макрос вместо предыдущего
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub 'выделено больше одной ячейки
If Not Intersect(Target, Range("E9:P24")) Is Nothing Then
    Dim iMonth As String
    Dim i As Integer
    Dim iLastRow As Integer
    Dim iLastRowГрафик As Integer
      iMonth = Cells(8, Target.Column)
       iLastRowГрафик = Cells(Rows.Count, 4).End(xlUp).Row + 1
  With Sheets(iMonth)
    iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
    If iLastRow > 5 Then
       .Range(.Cells(5, 1), .Cells(iLastRow, 5)).ClearContents
    End If
    For i = 9 To iLastRowГрафик
      If Not IsEmpty(Cells(i, 5)) Then
        iLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        If iLastRow = 5 Then
            .Cells(5, 1) = 1
        Else
            .Cells(iLastRow, 1) = .Cells(iLastRow - 1, 1) + 1
        End If
          .Cells(iLastRow, 2) = Cells(i, 5)
          .Cells(iLastRow, 3) = Cells(i, 4)
          .Cells(iLastRow, 4) = "Иванов И.И."
      End If
    Next
  End With
End If
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 19.12.2015 в 01:05
Valeriy89 Дата: Суббота, 19.12.2015, 01:15 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Kuzmich, структура точно такая же (я в примере для восприятия заменил только на LC, MB), т.е. в столбце Е внесены наименования оборудования (левее от столбца Е просто обобщенное описание или системы или местоположения), а уже со столбца с F по P по месяцам заполнены работы.
Еще раз выложу с вашим последним макросом.
К сообщению приложен файл: 8078473.xls (45.0 Kb)
 
Ответить
СообщениеKuzmich, структура точно такая же (я в примере для восприятия заменил только на LC, MB), т.е. в столбце Е внесены наименования оборудования (левее от столбца Е просто обобщенное описание или системы или местоположения), а уже со столбца с F по P по месяцам заполнены работы.
Еще раз выложу с вашим последним макросом.

Автор - Valeriy89
Дата добавления - 19.12.2015 в 01:15
Kuzmich Дата: Суббота, 19.12.2015, 01:21 | Сообщение № 17
Группа: Проверенные
Ранг: Ветеран
Сообщений: 715
Репутация: 157 ±
Замечаний: 0% ±

Excel 2003
Так попробуйте с новым макросом вносить ТО в столбец с январем на листе График
 
Ответить
СообщениеТак попробуйте с новым макросом вносить ТО в столбец с январем на листе График

Автор - Kuzmich
Дата добавления - 19.12.2015 в 01:21
Valeriy89 Дата: Суббота, 19.12.2015, 01:36 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Kuzmich, он вносит если вручную меняешь, при копировании не хочет, да и хотелось бы все делать по форме с кнопки, плюс ко всему если внизу в шаблоне вписать Должность_подпись_ФИО, то при переносе данных он удаляет эту фразу из шаблона, у меня есть пример, но не смог с ним разобраться, если выручите может быть у Вас получится изменить код под мою форму (там довольно корректно переносит данные и фразы оставляет и не меняет формы и тд)
К сообщению приложен файл: _____.xls (76.0 Kb)
 
Ответить
СообщениеKuzmich, он вносит если вручную меняешь, при копировании не хочет, да и хотелось бы все делать по форме с кнопки, плюс ко всему если внизу в шаблоне вписать Должность_подпись_ФИО, то при переносе данных он удаляет эту фразу из шаблона, у меня есть пример, но не смог с ним разобраться, если выручите может быть у Вас получится изменить код под мою форму (там довольно корректно переносит данные и фразы оставляет и не меняет формы и тд)

Автор - Valeriy89
Дата добавления - 19.12.2015 в 01:36
Wasilich Дата: Суббота, 19.12.2015, 12:29 | Сообщение № 19
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Может так надо? Только листов надо скопировать до 12.
К сообщению приложен файл: Valeriy89.xls (64.0 Kb)
 
Ответить
СообщениеМожет так надо? Только листов надо скопировать до 12.

Автор - Wasilich
Дата добавления - 19.12.2015 в 12:29
Valeriy89 Дата: Суббота, 19.12.2015, 22:33 | Сообщение № 20
Группа: Пользователи
Ранг: Новичок
Сообщений: 19
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Wasilic, Отличный вариант, только хотелось бы формировать план на любой месяц на лист 1, причем делать это с кнопки, т.е. нажимаю кнопку "План работ", она открывает форму где или 12 кнопок по месяцам или через комбобокс и переход по кнопке "Сформировать". На лист хочу для того, чтобы уменьшить количество листов в книге.
Т.е. как нужно задать выборку не по выбранному столбцу, а по заранее заданному (чтобы сделать поиск конкретно по январю, февралю и тд)?
А по формированию нового файла в нужную папку использую следующий код (как у меня реализовано для формирования Акта о выполнении ТО):
[vba]
Код
Private Sub CommandButton1_Click()
Sheets("Шаблон").Select
' Присваиваем значения нашим ячейкам, по именам которые мы задавали

Range("oborudov").Value = TextBox1.Value

' Копируем все
Cells.Select
Selection.Copy
' Создаем новую книгу или делаем ее активной
If NewBook = "" Then
Workbooks.Add
NewBook = ActiveWorkbook.Name
Else
Workbooks(NewBook).Activate
Cells(1, 1).Select
End If
' Вставляем данные в эту книгу
Application.DisplayAlerts = False
ActiveSheet.Paste
Application.CutCopyMode = False

On Error Resume Next
' название подпапки, в которую по-умолчанию будет предложено сохранить файл
Const REPORTS_FOLDER = "Отчёты\"
' создаём папку для файла, если её ещё нет
MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
' выбираем стартовую папку
ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER

' вывод диалогового окна для запроса имени сохраняемого файла
Filename = Application.GetSaveAsFilename("отчёт.xls", "Отчёты Excel (*.xls),", , _
"Введите имя файла для сохраняемого отчёта", "Сохранить")
' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
If VarType(Filename) = vbBoolean Then Exit Sub

' копируем активный лист (при этом создаётся новая книга)
Err.Clear: ActiveSheet.Copy: DoEvents
If Err Then Exit Sub ' произошла какая-то ошибка при попытке копирования листа

' убеждаемся, что активной книгой является копия листа
If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then
' сохраняем файл под заданным именем в формате Excel 2003
ActiveWorkbook.SaveAs Filename, xlWorkbookNormal

' закрываем сохранённый файл
' (удалить следующую строку, если закрывать созданный файл не требуется)
ActiveWorkbook.Close False
End If
ActiveWorkbook.Close False 'закрываем скопированный лист
UserForm1.Hide ' закрытие формы
Sheets("Данные").Select ' переход обратно к листу с кнопкой
MsgBox "Создание акта выполнено успешно"
End Sub
[/vba]
[moder]Оформляйте коды тегами (кнопка #). Исправила на первый раз[/moder]


Сообщение отредактировал Pelena - Суббота, 19.12.2015, 23:26
 
Ответить
СообщениеWasilic, Отличный вариант, только хотелось бы формировать план на любой месяц на лист 1, причем делать это с кнопки, т.е. нажимаю кнопку "План работ", она открывает форму где или 12 кнопок по месяцам или через комбобокс и переход по кнопке "Сформировать". На лист хочу для того, чтобы уменьшить количество листов в книге.
Т.е. как нужно задать выборку не по выбранному столбцу, а по заранее заданному (чтобы сделать поиск конкретно по январю, февралю и тд)?
А по формированию нового файла в нужную папку использую следующий код (как у меня реализовано для формирования Акта о выполнении ТО):
[vba]
Код
Private Sub CommandButton1_Click()
Sheets("Шаблон").Select
' Присваиваем значения нашим ячейкам, по именам которые мы задавали

Range("oborudov").Value = TextBox1.Value

' Копируем все
Cells.Select
Selection.Copy
' Создаем новую книгу или делаем ее активной
If NewBook = "" Then
Workbooks.Add
NewBook = ActiveWorkbook.Name
Else
Workbooks(NewBook).Activate
Cells(1, 1).Select
End If
' Вставляем данные в эту книгу
Application.DisplayAlerts = False
ActiveSheet.Paste
Application.CutCopyMode = False

On Error Resume Next
' название подпапки, в которую по-умолчанию будет предложено сохранить файл
Const REPORTS_FOLDER = "Отчёты\"
' создаём папку для файла, если её ещё нет
MkDir ThisWorkbook.Path & "\" & REPORTS_FOLDER
' выбираем стартовую папку
ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path & "\" & REPORTS_FOLDER

' вывод диалогового окна для запроса имени сохраняемого файла
Filename = Application.GetSaveAsFilename("отчёт.xls", "Отчёты Excel (*.xls),", , _
"Введите имя файла для сохраняемого отчёта", "Сохранить")
' если пользователь отказался от выбора имени файла - отменяем сохранение листа в файл
If VarType(Filename) = vbBoolean Then Exit Sub

' копируем активный лист (при этом создаётся новая книга)
Err.Clear: ActiveSheet.Copy: DoEvents
If Err Then Exit Sub ' произошла какая-то ошибка при попытке копирования листа

' убеждаемся, что активной книгой является копия листа
If ActiveWorkbook.Worksheets.Count = 1 And ActiveWorkbook.Path = "" Then
' сохраняем файл под заданным именем в формате Excel 2003
ActiveWorkbook.SaveAs Filename, xlWorkbookNormal

' закрываем сохранённый файл
' (удалить следующую строку, если закрывать созданный файл не требуется)
ActiveWorkbook.Close False
End If
ActiveWorkbook.Close False 'закрываем скопированный лист
UserForm1.Hide ' закрытие формы
Sheets("Данные").Select ' переход обратно к листу с кнопкой
MsgBox "Создание акта выполнено успешно"
End Sub
[/vba]
[moder]Оформляйте коды тегами (кнопка #). Исправила на первый раз[/moder]

Автор - Valeriy89
Дата добавления - 19.12.2015 в 22:33
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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