Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 121
1
Excel

Создание листов, соответствующих рабочим дням (без выходных)

29.03.2018, 08:27. Показов 1007. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Необходимо написать макрос,который бы создавал листы,у которых имя соответствует РАБОЧЕМУ дню в месяце и так на весь месяц. т.е. нужно чтобы листы с именем выходного дня не создавались.Возможно ли это?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2018, 08:27
Ответы с готовыми решениями:

Отчет с датами по рабочим дням
Здравствуйте! Помогите решить задачу. Известны две даты: ДатаНачала и ДатаОкончания, они берутся...

Дата по рабочим дням в запросе
Добрый день. УТ 10 В документе Реализация добавлен реквизит...

Определить, является ли день рабочим, если рабочий работает только по четным дням и четным неделям
Добрый день, нужна помощь, не понимаю как мне сделать это. Задание: Вводится k-й (1<=k<=365) день...

Определить, сколько можно купить тетрадей по 12 листов, по 48 листов и по 96 листов, зная цену
Определить, сколько можно купить тетрадей по 12 листов, по 48 листов и по 96 листов, если цена...

11
Заблокирован
29.03.2018, 09:04 2
Лучший ответ Сообщение было отмечено Greysis как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub WorkDaySheets()
Dim d As Date
d = Date
d = DateSerial(Year(d), Month(d), 1)
For d = d To DateAdd("M", 1, d) - 1
  If Weekday(d, 2) < 6 Then
    On Error Resume Next
    Worksheets.Add.Name = d
    If Err Then
      MsgBox d & " уже в наличии.", , "Перестарались!"
      Application.DisplayAlerts = False
      ActiveSheet.Delete
      Application.DisplayAlerts = True
    End If
  End If
Next d
End Sub
1
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
29.03.2018, 09:09 3
Greysis, для текущего месяца
Visual Basic
1
2
3
4
5
6
7
8
Sub bb()
Dim d As Date
  Application.ScreenUpdating = False
  For d = DateSerial(Year(Now), Month(Now) + 1, 0) To DateSerial(Year(Now), Month(Now), 1) Step -1
    If Weekday(d, vbMonday) < 6 Then Worksheets.Add(ActiveSheet).Name = Format(d, "Short Date")
  Next
  Application.ScreenUpdating = True
End Sub

Не по теме:

опоздал :)

0
3897 / 2302 / 776
Регистрация: 02.11.2012
Сообщений: 6,119
29.03.2018, 09:10 4
Остап Бонд, а как же выходные среди недели? праздничные
0
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 121
29.03.2018, 09:35  [ТС] 5
Цитата Сообщение от Казанский Посмотреть сообщение
Format
Ругается здесь

Добавлено через 2 минуты
и еще,они создаются справа налево,а надо наоброт
0
Заблокирован
29.03.2018, 09:40 6
Greysis, кнопку F1 на слове Add нажать попробуйте.
Параметры Before и After как раз про это.
1
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 121
29.03.2018, 09:48  [ТС] 7
Цитата Сообщение от Остап Бонд Посмотреть сообщение
Before и After
Пробовал,но если писать следующее
PureBasic
1
After:=Worksheets(Worksheets.Count)
он снова на меня ругается...у меня получалось либо добавить лист в конец(без имени),либо с именем,но в начало,а мне надо и с именем и в конец

Добавлено через 3 минуты
Цитата Сообщение от Остап Бонд Посмотреть сообщение
Параметры Before и After как раз про это.
прошу прощения,я просто не правильно прописывал,разобрался с этим,осталось только выяснить,как без года название вывести)
0
Заблокирован
29.03.2018, 09:54 8
Цитата Сообщение от Greysis Посмотреть сообщение
как без года название вывести
Visual Basic
1
Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = Format(d, "DD.MM")
1
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 121
29.03.2018, 09:57  [ТС] 9
Цитата Сообщение от Остап Бонд Посмотреть сообщение
.Name = Format(d, "DD.MM")
он у меня снова ругается на Format
0
Заблокирован
29.03.2018, 10:06 10
Попробуйте такое (скорее всего кто-то очень умный написал в Вашем проекте свой Format)
Visual Basic
1
VBA.Strings.Format$(d, "DD.MM")
1
0 / 0 / 0
Регистрация: 25.11.2015
Сообщений: 121
29.03.2018, 10:35  [ТС] 11
Цитата Сообщение от Остап Бонд Посмотреть сообщение
VBA.Strings.Format$(d, "DD.MM")
Спасибо,Все работает)

Добавлено через 22 минуты
Цитата Сообщение от Остап Бонд Посмотреть сообщение
OstaBander
Последний вопрос. А что нужно будет изменить,когда нужно будет чтобы создавал листы следующего,последующего,...,и т.д. месяцев?
0
Заблокирован
29.03.2018, 10:47 12
Если хотите авансом насоздавать листов- вместо Month(d) укажите номер нужного месяца.
1
29.03.2018, 10:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2018, 10:47
Помогаю со студенческими работами здесь

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

Формирование столбца чисел месяца, без учета выходных
Здравствуйте. Есть ячейка в которую заносится числовой номер месяца. Есть столбец, где...

Запрос подсчитывающий число дней между датами без выходных
Привет всем! Вот написал запрос на вычисление количества дней между датами, но он почему-то не...

Создание отчета с сортировкой по дням недели
Есть запрос содержащий поле с днем недели. Нужно составить отчет примерно как во вложении, на...

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

Создание расписания запуска службы по дням недели
Добрый день. Хочу сделать GUI для службы, в котором можно задать периодичность выполнения...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru