Страницы: 1 2 След.
RSS
Создание новой книги с одним листом при выполнении макроса
 
Доброго всем времени суток! Помогите пожалуйста или доработать код найденный на просторах интернета или кому будет проще, можете предложить свой.

Сразу извиняюсь за много букв, буду пробовать объяснить как можно понятнее, так как для многих форумчан, думаю эта задача не сложная, главное правильно объяснить :)

Суть в следующем (лишнее в примере убирал оставил только суть проблемы):
1. Сейчас есть книга "вопрос расчет" в ней 4 листа
2. На листах "Обработка 1" и "Обработка 2" производится окончательные расчеты для двух разных вариантов (грубо говоря отличие только внизу в оформлении в одном из случаев там будет даже рисунок)
3. На этих же листах есть кнопка запуска макроса и рядом с ней расчеты, а на самом листе как говорится приведено к нормальному для глаз человека вида через функцию сцепить и т.д. что бы смотрелось красиво, например Д=12*21*3312=834624
4. Теперь мне нужно, что бы при нажатии на кнопку создавалась новая книга (этот пункт получился хорошо с нужным названием и + добавление текущей даты) но на которой был бы только один лист с названием расчет, на который бы переносились только видимые значения из диапазона А1:J76 с сохранением исходного оформления ширины строк, колонок и нарисованных рамок (не копируя кнопку и расчеты возле нее, а также самое главное не копируя исходные формулы которые использую для оформления)
5. При создании новой книги не нужно запрашивать дополнительно путь для сохранения файла и его названия (сейчас это происходит)
6. После переноса 1 книгу с 4 листами нужно закрыть и сохранить, а оставить открытой 2 книгу с одной страничкой "Расчет"

Заранее благодарен за помощь файл пример прилагаю, то что сейчас у меня получается
С ув. Дмитрий

P/S/ буду рад ответить на доп вопросы если такие будут :)
 
Копировать диапазон данных, столбцам и строкам задать нужные размеры, форматировать как нужно  ячейки...
Можно по-другому:
Код
    With Workbooks.Add
        Worksheets("нужный").Copy Before:=.Sheets(1)
       
        With .Sheets(1)
            .Name = "Расчет"
            .Cells.Value = Cells.Value ' заменяем формулы на значения
            ' тут удаляем с листа лишнее
        End With
        
        For i = .Sheets.Count To 2 Step -1: .Sheets(i).Delete: Next i ' удаляем листы
'        обзываем книгу, сохраняем, закрываем
    End With

Создается книга с количеством листов, указанным по умолчанию. Копируем туда лист, чистим о лишних данных, удаляем лишние листы.
Если в исходной книге есть именованые диапазоны, он могут потянуться за листом в новую книгу. Убираем.
 
Вить, зачем такие сложности с тремя новыми листами? Просто
Код
Sheets("Лист1").Copy
и готова новая книга с одним листом.
 
Как это? Копировал лист - он в буфере. Дальше?
 
А дальше ничего: выполни эту строку - получишь новую книгу с одним листом и с этим же именем ))
 
Ну, котяра! Ну, удивил! А я-то столько лет... Спасибо.
 
Цитата
vikttur написал:
Копировал лист - он в буфере. Дальше?
Вить, это ж не диапазон.
Фактически это действие из интерфейса - копирование листа в новую или существующую книгу.
По вопросам из тем форума, личку не читаю.
 
Вот еще одна полезность от помощи на форуме - сам развиваешься )
Не думал, не гадал, что при копировании листа на лету создается книга.
 
vikttur, Попробовал вставить Ваш код, да действительно создает лист "Расчет", но он пустой без значений, как это можно исправить?  
 
https://docs.microsoft.com/en-us/office/vba/api/excel.sheets.copy
If you don't specify either Before or After, Microsoft Excel creates a new workbook that contains the copied sheet.
Изменено: БМВ - 29.03.2020 18:24:02
По вопросам из тем форума, личку не читаю.
 
БМВ, в английском не силен, но с помощью переводчика понял, что это копирует лист в другое место в рабочей книге, а не в новый файл
 
Не знал, не видел, не читал, виноват, исправлюсь
 
Цитата
TMD написал:
это копирует лист в другое место в рабочей книге, а не в новый файл
Это что за переводчик у Вас? ))
А как Ваш переводчик переведёт это?
Цитата
БМВ написал:
Excel creates a new workbook that contains the copied sheet.
 
Юрий М,
Excel создает новую книгу, которая содержит скопированный лист.

а то что я переводил это была первая строка из ссылки https://docs.microsoft.com/en-us/office/vba/api/excel.sheets.copy
 
Цитата
TMD написал:
в английском не силен
If you don't specify either Before or After, Microsoft Excel creates a new workbook that contains the copied sheet.
Если вы не укажите ни Before ни After, Microsoft Excel создает новую рабочую книгу которая содержит скопированный лист.
По вопросам из тем форума, личку не читаю.
 
Юрий М, можете подсказать почему лист создается пустой и значения не компилируются хотя и указываю Worksheets("Обработка 1").Copy Before:=.Sheets(1)
 
Покажите, где и как создаете
 
vikttur, код не стал сюда копировать он большой
 
Выполнил макрос с одной строкой:
Код
Sub qqq()
   Worksheets("Обработка 1").Copy Before:=Sheets(1)
End Sub
Появился новый лист со всеми данными и даже с кнопкой )
К имени нового листа добавилось (2), как и положено.
 
Создается книга, дальше
Код
If cFileName = False Then Exit Sub

и до копирования листа дело не дошло
 
Юрий М, да Вы все верно сказали :
Появился новый лист со всеми данными и даже с кнопкой )
К имени нового листа добавилось (2), как и положено.

Но нужно что бы в новой книге появилось все тоже что у Вас получилось только без кнопки и расчетов которые возле книги, а формулы были не формулами, а значениями (грубо говоря что бы скопировало только диапазон А1:J76)
Изменено: TMD - 29.03.2020 19:04:47
 
Цитата
vikttur написал:
и до копирования листа дело не доходит
А как же это?
Цитата
TMD написал:
лист создается пустой и значения не компилируются
 
Цитата
vikttur написал:
Создается книга, дальше
Код ? 1If cFileName = False Then Exit Subи до копирования листа дело не доходит
После создания книги, я так понимаю следующей строкой файл создается
  cFileName = Application.GetSaveAsFilename("Ðàñ÷åò" & "_" & Format(Now(), "DD_MM_YYYY hh mm"), "Êíèãà Microsoft Office Excel, *.xlsx")
а потом идет проверка, если файл не создан, тогда выход
   If cFileName = False Then Exit Sub
 
TMD, как скопировать лист в новую книгу, было показано в #3
Как удалит кнопку (фигуру) на листе - отдельный вопрос.
Как заменить формулы значениями - тоже отдельный вопрос.
И то и другой неоднократно обсуждалось на форуме.
 
Юрий М, можете пожалуйста ткнуть носом где именно, мне нужно объединить эти три действия, а как именно не могу понять  
 
TMD, Вы упрямо уходите от заявленной темы: новую книгу с одним листом создали? Получилось? Всё - тема исчерпана.
Цитата
Юрий М написал:
Как удалит кнопку (фигуру) на листе - отдельный вопрос.
Как заменить формулы значениями - тоже отдельный вопрос.
И то и другой неоднократно обсуждалось на форуме.
Не получится найти поиском по форуму - создайте соответствующие темы.
 
я вообще не понимаю откуда в теме:
Цитата
TMD написал:
Создание новой книги с одним листом при выполнении макроса
25 постов?
если новая книга с одним листом создается элементарным кодом в пару строк:
Код
Sub NewWB1Sheet()
  Dim wb As Workbook
  Set wb = Workbooks.Add(): Application.DisplayAlerts = False
  Do While wb.Worksheets.Count > 1
    wb.Worksheets(wb.Worksheets.Count).Delete
  Loop
  Application.DisplayAlerts = True
End Sub
что еще?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Юрий М, Ігор Гончаренко, не в обиду конечно, но такое впечатление, что Вы читаете только название темы и все, а то что я в 6 пунктах описал проблему что это не простое создание новой книги, а с подводными камнями Вы как будто не замечаете

я пробовал и макрорекордером записывать, получается или скопировать и вставить только значения нужные или только форматирование колонок и строк, все вместе не получалось
 
TMD, на форум заходит много людей. И подумайте сами - придёт ли в голову человеку, которому нужно заменить формулы на значения, искать ответ на свой вопрос в теме про создание книги с одним листом?  А то, что у Вас имеются сопутствующие вопросы, так об этом в правилах: одна тема - один вопрос.
По поводу макрорекордера: Вы пробовали записать удаление кнопки, а макрорекордер это не смог записать?
 
какие обиды?
так все и есть: читаю название темы, понимаю, что могу ответить и когда вижу в теме 25 постов слегка недоумеваю
потому что понимаю, что все должно бы выглядеть так:
1-й пост: как создать новую книгу с одним листом
2-й пост: вот так (и несколько строк кода)
3-й пост: спасибо!
тема закрыта
еще больше я недоумеваю, когда люди задают вопросы, ответы на которые их вообще не интересуют
их интересует что угодно, только не ответ на вопрос заданный в теме. это иногда настораживает: может вас заставили написать такой вопрос используя прямой физический или другие методы принуждения.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1 2 След.
Наверх