Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
6 / 7 / 1
Регистрация: 05.11.2013
Сообщений: 310

Создать новые и переместить старые листы

24.11.2022, 05:29. Показов 1669. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравия.
Имеется некий файл с листами:
Svod. Янв. Фев. Mарт. Апр. ....Нояб.
Каждый месяц добавляется новый лист.
Начиная с сентября/октября машина начинает "думать"

Как сделать кнопочку, чтобы при нажатии выполнялось следующее:
- копировался последний лист ( сейчас это "Нояб")
- в диапазоне A2:R700 очищались все ячейки без формул
- переименовывался на следующий месяц ("Дек" а потом в "Янв"
- все листы кроме "Svod." и последних двух ("Нояб." , "Дек") надо вырезать из рабочей книги и вставить в книгу "Архив"

т.е. чтобы файл не тормозил надо оставить только 3 листа ( Svod. прошедший и настоящий месяц) а всё остальное архивировать
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.11.2022, 05:29
Ответы с готовыми решениями:

Создать новые листы по кол-ву элементов в массиве
Нужно добавить в книгу листы, по кол-ву элементов в массиве . И дать названия листу, соответвующее элементу этого массива. Немного не...

Не могу создать новые листы Excel
В общем у меня есть процедура, которая в добавок ко всему создает новый лист excel (если это требуется) и переносит туда данные. Ругается...

Что лучше оставить старые планки и добавить новые, или вытащить их и поставить новые?
Привет всем нуждаюсь в совете. У меня комп на базе AMD Мамка A8N-SLI Deluxe. Сейчас стоит у меня 2 планки Corsair Value Select...

21
 Аватар для Angry Old Man
3600 / 753 / 317
Регистрация: 26.03.2022
Сообщений: 1,416
Записей в блоге: 1
24.11.2022, 22:36
Студворк — интернет-сервис помощи студентам
Господин 0mega,
Предлагаю иное решение: скрипт vbs вне файла Excel.
Листы (со второго) должны именоваться
Декабрь nnnn Январь nnnn Февраль nnnn Март nnnn Апрель nnnn Май nnnn Июнь nnnn
Июль nnnn Август nnnn Сентябрь nnnn Октябрь nnnn Ноябрь nnnn Декабрь nnnn Январь nnnn
Допустим, сейчас у Вас данные Январь 2022 ... Ноябрь 2022 (Вам виднее, сколько последних месяцев оставить)

Алгоритм такой: имеющиеся листы с имеющимися данными переименовываются: Февраль 2022 ... Декабрь 2022
Данные из Март 2022 (бывший Февраль) копируются в Февраль, из Апрель 2022 в Март 2022 и т д.

Лист Декабрь 2022 очищается тем или иным способом - думайте сами.
Вы писали: " в диапазоне A2:R700 очищались все ячейки без формул" - я не увидел там формул, но индивидуальный анализ каждой ячейки требует существенного времени. Я очищаю чохом весь диапазон. Но если не подходит, можно анализировать и каждую ячейку.

Что делается в своде - судить не берусь и его не трогаю.

Вы писали: "все листы кроме "Svod." и последних двух ("Нояб." , "Дек") надо вырезать из рабочей книги и вставить в книгу "Архив" - Вас тянет в омут - неизбежно этот архивный файл станет неприлично большим и неприлично медленно будет обрабатываться. Поэтому другое решение - имеющийся файл перед обработкой копируется в архив с тем же именем, с добавлением даты к имени. Первоначально - оставьте в исходном файле небольшое кол-во месяцев (Вам хотелось три - ничего не мешает)
Путь к файлу и путь к архивной папке укажИте свои)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Option Explicit
 
Dim Fname: Fname = "Z:\Soft_Out\Frm.xls"        ' Имя файла для обработки
Dim FoldArc: FoldArc = "Z:\Box_Out"             ' Имя папки для архива
 
Dim R, Rall: Rall = "A2:R700"                    'Диапазон ячеек с данными
 
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim nMonth: nMonth = Array(MonthName(12), MonthName(1), MonthName(2), MonthName(3), MonthName(4), MonthName(5), MonthName(6), MonthName(7), MonthName(8), MonthName(9), MonthName(10), MonthName(11), MonthName(12), MonthName(1))
Dim i, j, wbName, nSheets, wsName, wName, yName
 
With CreateObject("Scripting.FileSystemObject")
    If Not FSO.FileExists(Fname) Then
        MsgBox "Файл" + vbCr + Fname + vbCr + "не найден"
        Script.Quit    'Exit Sub    'WScript.Quit  '
    Else
        .CopyFile Fname, FoldArc + "\" + CStr(Year(Now)) + CStr(Month(Now)) + CStr(Day(Now)) + CStr(Hour(Now)) + CStr(Minute(Now)) + "-" + .GetFileName(Fname)
    End If
End With
 
Dim XLS: Set XLS = CreateObject("Excel.Application")
With XLS
    .Visible = True  'False  '
    .Workbooks.Open (Fname)
    wbName = .ActiveWorkbook.Name
    nSheets = .Worksheets.Count
 
    .Application.ScreenUpdating = False  '''''''''True      '
    With .Workbooks(wbName)
    For i = nSheets To 2 Step -1
        wsName = .Worksheets(i).Name
        For j = 1 To 12
            wName = Split(.Worksheets(i).Name, " ")(0)
            yName = CInt(Split(.Worksheets(i).Name, " ")(1))
            If UCase(nMonth(j)) = UCase(wName) Then
                If j = 12 Then
                    .Worksheets(i).Name = nMonth(j + 1) + " " + CStr(yName + 1)
                Else
                    .Worksheets(i).Name = nMonth(j + 1) + " " + CStr(yName)
                End If
                Exit For
            End If
        Next
        
    Next
    
    For i = 2 To nSheets - 1
        .Worksheets(i + 1).Range(Rall).Copy
        .Worksheets(i).Range(Rall).PasteSpecial
        .Sheets(i).Select
        .Worksheets(i).Range("A1").Select
    Next
 
    .Sheets(nSheets).Select
' Закоментирована поклеточная очистка нового месяца c анализом наличия формул - медленно
'    For Each R In .Worksheets(nSheets).Range(Rall)
'        If Not R.HasFormula Then R.ClearContents
'    Next
    .Worksheets(nSheets).Range(Rall).ClearContents          'Очистка контента всего диапазона
    End With
 
    .Application.ScreenUpdating = True
    MsgBox "Done"
End With
Алгоритм я изложил,
если кто-то захочет оставить свой автограф в моем файле - пишите пожалуйста через апостроф пояснения к командам
- это очень трудоёмко, по конкретным вопросам готов отвечать.
1
6 / 7 / 1
Регистрация: 05.11.2013
Сообщений: 310
25.11.2022, 12:43  [ТС]
Angry Old Man, здравствуйте

спасибо а ответ
Цитата Сообщение от Angry Old Man Посмотреть сообщение
- это очень трудоёмко,
я это прекрасно знаю и понимаю.
Именно поэтому попросил не полную программу, а только те фрагменты , которые не знаю
Если честно, то я не понимаю зачем для стандарных команд " удалить/добавить лист" так настоятельно просили выслать файл ?!
Цитата Сообщение от Angry Old Man Посмотреть сообщение
этот архивный файл станет неприлично большим и неприлично медленно будет обрабатываться
Архив вообще не будет обрабатываться.
Архив служит для того чтобы при необходимости проверить/ сравнить с данными N-летней давности.
И "большим" он тоже не будет по той причине, что к концу года его имя изменится на Архив 2022 ( это можно и руками сделать)
а последующие листы будут архивироваться в новый Архив
Цитата Сообщение от Angry Old Man Посмотреть сообщение
я не увидел там формул,
За всё время эта таблица изменялась как минимум 4-5 раз.
При следующем редактировании могут и формулы потребоваться ... мне тогда опять к вам обращаться ?
спасибо за код по очистке ячеек.
апостроф перед кодом увеличит скорость обработки. А при необходимости его (апостроф) удалить не сложно

Спасибо за детальное объяснение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.11.2022, 12:43

Вывести новые данные "перекрывающие" старые, не выводя старые
Добрый вечер! Описание можно пропустить и читать сразу, что под спойлером Есть две таблицы. В одной задаются программы работы, в...

По содержимому столбца создать листы и в эти листы скопировать соответствующие строки
Здравствуйте, уважаемые Форумчане!!! Есть задачка: В прикреплённом файле есть табличка. Надо по содержимому колонки, например отдел,...

Переместить листы в одну книгу
Доброго времени суток! подскажите пожалуйста, как реализовать такой момент: Открыто несколько книг, в каждой по одному листу. Как...

Переместить листы в новую книгу
Здравствуйте, форумчане! Я написал макро, согласно которому открывается новый файл. Файл этот получает соответствующее имя, ну и...

Новые листы в одном окне [Delphi 7]
Ребят, нужна помощь, как сделать так чтобы можно было создавать 2 листа и больше и чтобы выглядели так: http://savepic.net/1464356.png ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru