Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Результаты опроса: Удобно?
Не пробовал(а) 2 40.00%
Нет 0 0%
Да 3 60.00%
Опрос с выбором нескольких вариантов ответа. Голосовавшие: 5. Вы ещё не голосовали в этом опросе

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2009, 10:01   #1
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Перевод и печать дат н. э. по григорианскому календарю дарю.

Это можете и вы!
Источник: недавняя тема. Прикрутил к ней новую кнопку. Вперёд!

Код:
Option Explicit
Option Base 1
Код:
Sub PrintWeekDaysGrid(Optional Y, Optional M, Optional d As Integer, Optional wd As Integer)
'печатает календарь на месяц M года Y - или на текущий месяц, если не задано Y, M, d или wd'
Dim j, visokos, weekdayline, firstmonthday, registers, NextDate As Date

If IsMissing(Y) Or IsMissing(M) Or IsMissing(d) Or IsMissing(wd) Then _
Y = Year(Date): M = Month(Date): d = Day(Date): wd = Weekday(Date)      ',vbSunday)

If Y Mod 4 = 0 Then visokos = 1
If Y Mod 100 = 0 Then visokos = 0
If Y Mod 400 = 0 Then visokos = 1

registers = Array(31, 28 + visokos, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
Код:
firstmonthday = (wd - (d - 1) Mod 7 + 7) Mod 7  'день недели 1-го числа месяца'
firstmonthday = 1 + ((firstmonthday + 5) Mod 7) 'день недели 1-го числа месяца по-русски'
Код:
With Selection
.EndKey wdStory                             'перемещение курсора в конец документа'
.TypeParagraph                              'печать с новой строки (абзац)'
.TypeText MonthName(M) & "-" & Y & Chr$(11) 'печать названия месяца (в VBA 6 и выше)'

    For weekdayline = 1 To 7
        If weekdayline > IIf(Y > 1964, 5, 6) Then .Font.Color = vbRed 'окраска уик-энда'
        j = 1 + (7 - firstmonthday + weekdayline) Mod 7
        'число, на которое выпал первый ПН, ВТ, СР и т. д.'
        .TypeText WeekdayName(weekdayline, , vbMonday) 'название дня недели на вашем языке'
        
        .ParagraphFormat.TabStops.Add _
        Position:=CentimetersToPoints(0.6 * .Font.Size), Alignment:=wdAlignTabRight
        If j > weekdayline Then .TypeText vbTab     'отступ (табуляция), пока день j > d* '
        .TypeText vbTab                                      '(*первого печатаемого в строке дня)'
        
        .ParagraphFormat.TabStops.Add _
        Position:=CentimetersToPoints(0.25 * .Font.Size), Alignment:=wdAlignTabRight
        
        For d = j To registers(M) Step 7
            .TypeText vbTab
            .TypeText d
        Next d
        
        .Font.Color = wdAuto
        .TypeText IIf(weekdayline = 7, Chr$(13), Chr$(11))
    Next weekdayline
    
.ParagraphFormat.TabStops.ClearAll
End With
Код:
'If MsgBox("Продолжить?", vbInformation + vbOKCancel) <> vbCancel Then
'    If Y < 9999 Then
'        NextDate = DateAdd("m", 1, DateSerial(Y, M, 1))
'        Call PrintWeekDaysGrid(Year(NextDate), Month(NextDate), Day(NextDate), Weekday(NextDate))
'        Else: MsgBox "Много!"
'    End If
'End If

End Sub
Вложения
Тип файла: doc DateShift.doc (77.0 Кб, 44 просмотров)

Последний раз редактировалось Sasha_Smirnov; 11.10.2009 в 01:17. Причина: уточнение темы; оформление кода тэгом.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 10.10.2009, 15:57   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

На удивление, григорианский календарь печатается не с 1.1.100 (как установлено в VBA), а с 1.1.1.

Похоже, фокус в том, что 1-й и 21-века (по новому стилю) совпадают.

К сожалению, Windows ставит дату минимум 1.1.1980. Максимум — 31.12.2099.

Поэтому используйте все кнопки, там разберётесь.

Последний раз редактировалось Sasha_Smirnov; 11.10.2009 в 01:07. Причина: 31.12.2099
Sasha_Smirnov вне форума Ответить с цитированием
Старый 21.10.2009, 05:21   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

А честно, надо переделать: первые 8 лет не были високосными!

Да ещё и каждый 4000-й год невисокосен, как утверждает Серж Близнюков, имея на то основания.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 29.12.2009, 07:32   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Усталость кода

В принципе то же самое, но...

KeepWithNext свойство полезное, но вдруг «слетело»!

Любытен также спецэффект при пересохранении — сжатие на 1/6 объёма (как в теме http://programmersforum.ru/showthrea...110#post405110).
Изображения
Тип файла: jpg DateShift2009.jpg (32.3 Кб, 150 просмотров)
Вложения
Тип файла: doc DateShift2009.doc (92.5 Кб, 24 просмотров)
Тип файла: rar DateShift2009.rar (29.4 Кб, 26 просмотров)

Последний раз редактировалось Sasha_Smirnov; 30.12.2009 в 05:29. Причина: добавление в код ".ParagraphFormat.KeepWithNext" «сжало» файл на 15 кб! Нонсенс... подтверждение приложено: DateShift2009.rar
Sasha_Smirnov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень медленно печатает принтер Samsung ML 3561ND >>arty<< Компьютерное железо 0 30.07.2009 17:00
принтер криво печатает текст SKS Компьютерное железо 2 23.04.2009 16:54
Кто печатает деньги? - Федеральная резервная система (США) Alar Свободное общение 0 22.04.2008 22:33
не печатает принтер!!!! ronich Операционные системы общие вопросы 5 22.11.2007 08:52