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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2009, 16:44   #1
AvivNoa
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 10
По умолчанию Динамическое изменение даты

Добрый день . Прошу помочь в следующем вопросе.

(если спрашиваю глупость- не забрасывайте камнями).

В Worde - вставляю ( Insert-ом) (интерфейс англицкий) - Date and Time (в текст) , и рядом хочу что бы в продолжении текста, изменялось динамически следующая вставка времени (добавлялось ,например , 9 месяцев)

Пример:
Зачатие произошло 1.01.2001 ,
ожидаемое рождение ребенка (1.01.2001)+9месяцев = 1.10.2001


как можно применить формулу для изменения даты.
Наверняка есть стандартная формула в ВОРДЕ, просто я никогда этим не занималась.

Спасибо за помощь.

Noa
AvivNoa вне форума Ответить с цитированием
Старый 19.02.2009, 05:58   #2
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Проба старого пера

Вот попробуйте для начала.
Программа тупо добавляет 9 мес. к той дате, что вы выделили в документе, — и печатает (ниже) новую.

Необходимо в Региональных стандартах Windows выбрать русский (или другой язык, где точки являются допустимыми в формате дат).

Код:
Sub ToFitTheDate()
Const NESKOLKO = 9
Dim dateNew As Date

With Selection
    
    If Not IsDate(.Text) Then MsgBox "Необходимо выделить ДАТУ.": Exit Sub
    
    MsgBox "Прибавляю " & NESKOLKO & " месяцев."
    
    dateNew = DateAdd("m", NESKOLKO, DateValue(.Text)) 'добавили NESKOLKO месяцев'
    
    .Collapse Direction:=wdCollapseEnd 'снятие выделения (с исходной даты)'
    
    .MoveRight wdSentence   'перемещение в следующее предложение (если оно есть)'
    
    .TypeParagraph          'печать абзаца (это для наглядности)'
    
    .TypeText Format(dateNew, "D.mm.yyyy") 'печать новой даты'
        
End With
End Sub
(В приложенном файле есть готовая кнопка — «Date FIT», пробуйте!)
Вложения
Тип файла: doc Decret.doc (36.0 Кб, 121 просмотров)

Последний раз редактировалось Sasha_Smirnov; 20.02.2009 в 01:18.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 19.02.2009, 09:20   #3
AvivNoa
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 10
По умолчанию

спасибо за ответ
Наверное я некорректно изложила свою проблему, если она заставила Вас так задумываться, а так понимаю , что проблема моя решается гораздо проще (если знать где копать )
Попытаюсь еще раз изложить суть проблемы . Имеется документ о проведении проверки , ну предположим следующего содержания :

% Я испектор сантехнадзова Сидоров Вася 10.02.09 произвел проверку ........................... следующей проверки 10.04.10 %

Так вот моя задача, при открытии файла в место где дата проверки текущей, "вкидывается " (системой- из Insert- Data and Time)- сегодняшняя дата , а в место где имеется "дата следующей проверки" - система сама добавляет заранее заданное число месяцев или дней.
Навярняка в ВОРДЕ имеется такая функция- просто я не могу её найти .
Функция типа DATA(dd/mm/yyyy)+DATA(dd/mm/yyyy), что то типа такого .
Спасибо за помощь
Noa
AvivNoa вне форума Ответить с цитированием
Старый 19.02.2009, 16:04   #4
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Текущая дата вставляется сочетанием альт-шифт-D.

При следующем открытии (или при печати) она обновляется, если так настроен Word, или (выделив её) по F9.

А вот получить, в виде поля, предстоящую дату — не получается. Даже если в поле "Формула" сложить дату (сегодняшнюю) и 1 — то поле (после обновления) даёт 1 (а не завтрашнюю дату).

В то же время в программе такое действие проходит на ура. Так что присылайте документ — бум думать!

Последний раз редактировалось Sasha_Smirnov; 20.02.2009 в 01:17. Причина: исправил альт-F9 на F9.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 19.02.2009, 16:14   #5
AvivNoa
Пользователь
 
Регистрация: 18.02.2009
Сообщений: 10
По умолчанию

отвечаю
во первых спасибо за желание помочь
файл документа приложен
спасибо

во получилось приложить файлик
Вложения
Тип файла: doc ДОКУМЕНТ.doc (24.0 Кб, 115 просмотров)

Последний раз редактировалось Stilet; 07.11.2015 в 10:34.
AvivNoa вне форума Ответить с цитированием
Старый 19.02.2009, 19:23   #6
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Не знаю, что-то кажется мне, что полями здесь не отделаешься.
Нужно пользовать макрос. Может встроенные элементы формы? К ним можно нужный макрос прикрутить. Да…
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 19.02.2009, 23:00   #7
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Попытка ту

Да полями-то можно — да только знать их на уровне ассемблера! (А мы не таковские!)

Посему опять таки пробный макрос.

Код:
Sub FindDateFieldAndComputeOther()
Const Q = 1 'количество добавляемых к текущей дате дней, месяцев или лет'
Dim byteQ As Byte, dateSys As Date, dateTemp As Date

With ActiveDocument.Fields
    byteQ = .Count          'количество полей в активном документе'
    If byteQ = 0 Then Exit Sub 'если полей 0, программе работать не с чем'
    .Update                 'обновляем поля (дата - становится сегодняшней)'
    If Not .Item(1).ShowCodes Then _
    .ToggleShowCodes        'делаем коды полей видимыми'
End With


If byteQ < 4 Then _
MsgBox "В документе """ & ActiveDocument & """ меньше 4 полей;" & vbCr & _
"чтобы добавить, где Вам нужно, поля даты, жмите <Alt>+<Shift>+D": Exit Sub

With Selection
    .HomeKey (wdStory)      'кусор - в начало документа'
    .Find.Text = "^d"       'ищем поле (от курсора и далее)'
    .Find.Wrap = wdFindStop
    .Find.Execute           'нашли и выделили'

    If InStr(UCase(.Text), "DATE") Then
        .Fields.ToggleShowCodes 'переключили поле к виду "значение поля";'
                                	'теперь выделена сегодняшняя дата'
        dateSys = .Text     'сохранили значение даты в переменной dateSys'
        .Collapse           	'сняли с неё выделение'
    Else
        MsgBox "Документ не содержит поле DATE сразу за курсором.": Exit Sub
    End If
    
    
    dateTemp = dateSys + 1              'добавили 1 день'
    .Find.Execute           'нашли следующее поле'
                            	'это не обязательно дата, - любое поле Word;'
                            	'достаточно нажать контрол-F9 в нужных вам местах'
    .TypeText dateTemp      'напечатали (вместо него) дату завтрашнего дня'
    
    dateTemp = DateAdd("m", Q, dateSys) 'добавили Q месяцев'
    .Find.Execute           'нашли следующее поле'
    .TypeText dateTemp      'напечатали (вместо него) дату через Q месяцев'
    
    dateTemp = DateAdd("YYYY", Q, dateSys) 'добавили Q лет'
    .Find.Execute           'нашли следующее поле'
    .TypeText dateTemp      'напечатали (вместо него) дату через Q лет'
End With
End Sub
А в 2.doc — жмите кнопку «Next DATE».
И ради всего святого, не лепите лишних пробелов в Ваших образцовых текстах. А то прокляну:-)
Вложения
Тип файла: doc 2.doc (43.0 Кб, 93 просмотров)

Последний раз редактировалось Sasha_Smirnov; 19.02.2009 в 23:24. Причина: изменил в примечаниях 1 на константу (Q лет).
Sasha_Smirnov вне форума Ответить с цитированием
Старый 19.02.2009, 23:30   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
Лампочка решение с использованием вычислений в полях

по ссылке многоуважаемого Aent (c форума forum.developing.ru)
нашёл статью Formatting Word fields with switches

и там есть ссылочка на любопытнейший файлик - DateCalc.zip - 81kb - (Updated 1/5/2008) A document containing instructions and examples of just about every date calculation you could wish for.

во вложении, решение задачи исключительно используя вычисления в полях!!!

p.s. Внимание! Не забывать обновлять поля выделив текст и нажав F9 !!
Вложения
Тип файла: doc ДОКУМЕНТ2.doc (26.5 Кб, 327 просмотров)

Последний раз редактировалось Serge_Bliznykov; 19.02.2009 в 23:32.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.02.2009, 23:58   #9
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Набор текста в Word и умные поля

Это ж моя прошлогодняя мечта! Супер, Серж. Жаль, что не сам.

Последний раз редактировалось Sasha_Smirnov; 20.02.2009 в 00:55. Причина: убрал p/s.
Sasha_Smirnov вне форума Ответить с цитированием
Старый 19.02.2009, 23:59   #10
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
…И ради всего святого, не лепите лишних пробелов в Ваших образцовых текстах. А то прокляну:-)
Это уж как полагается.

А человек-то нашел! Завтра печатаю, и учиться, учиться, учиться
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое изменение URL страницы в JavaScript без перезагрузки страницы ilusha JavaScript, Ajax 7 25.02.2009 09:59
Динамическое суммирование cat2182 Microsoft Office Excel 1 19.11.2008 07:53
Динамическое MainMenu dr.Chas Общие вопросы Delphi 4 24.06.2008 20:33
Динамическое меню? Ice_Juice Microsoft Office Excel 12 03.03.2008 11:24
Динамическое создание объекта Fruit Общие вопросы Delphi 5 24.01.2008 11:00