Excel это не сложно

Основные форумы => Вопросы по Word и VBA => Тема начата: anton-diz от 08.06.2018, 13:43:20



Название: самообновляемое поле дата - MS Word
Отправлено: anton-diz от 08.06.2018, 13:43:20
Приветсвую уважаемые форумучане!!! Обращаюсь к Вам Гуру MS Word!!!

Подскажите как можно связать поля между собой поле с переменными, а именно поле элемент управления содержимым "выбор даты" (расположенный панель управления > Разработчик > Элемент управления содержимым "выбор даты") т.е. хотелось бы иметь следующие при изменении даты в одном из полей, чтоб дата изменялась во всех аналогичных полях.


P.S. мне знакомы функция поля которые самообновляються при изменении поля (Вставка > Свойства документа > Автор и др... )

(https://image.ibb.co/mU8jSo/6.jpg)
(https://image.ibb.co/njnNDT/7.jpg)


Название: Re:самообновляемое поле дата - MS Word
Отправлено: Дмитрий Щербаков(The_Prist) от 08.06.2018, 15:03:40
Не понял, если честно. В приложенном примере одно поле дата и два поля Автор. Какие еще поля должны обновляться при изменении даты выбором из календаря? Вообще все, что ли?
Ну и без макросов это вряд ли получится сделать. Можно поле с выбором даты сделать закладной, в остальных полях использовать формулу и ссылку на эту закладку. А кодом обновлять. Только вроде как события нет никакого, которое бы отслеживало изменение в полях, что несколько усложняет задачу или делает инструмент обновления не очень удобным.


Название: Re:самообновляемое поле дата - MS Word
Отправлено: anton-diz от 08.06.2018, 18:04:03
Не понял, если честно. В приложенном примере одно поле дата и два поля Автор.
чтоб поле Дата  обновлялась во всех частях документа, т.к.  предполагаеться использовать ее в многостраничном документе, а наличие встроенного контекстного календаря  делает ее использование очень удобной
 


Название: Re:самообновляемое поле дата - MS Word
Отправлено: Дмитрий Щербаков(The_Prist) от 08.06.2018, 18:23:07
поле Дата  обновлялась во всех частях документа
теперь скачайте свой файл и найдите там хотя бы два поля дата. Там одно поле дата и два поля Автор. Об этом речь. Что еще-то надо обновлять, если поле только одно и совершенно неясно какие даты еще надо обновлять. Может Вы не поля дат имеете ввиду, а что-то другое?


Название: Re:самообновляемое поле дата - MS Word
Отправлено: anton-diz от 08.06.2018, 18:49:21
суть чтоб  при изменении поля Y изменялись поля X ,Z и тд.  то есть Y=X=Z


Название: Re:самообновляемое поле дата - MS Word
Отправлено: Дмитрий Щербаков(The_Prist) от 08.06.2018, 19:13:31
И еще раз, прям в лоб: какого типа все эти поля? Это все даты или это может быть поле любого типа? Может ли быть в документе поле, которое не должно изменяться при изменении поля Y?
Для чего я все это выясняю: как уже писал, сделать зависимые друг от друга поля стандартно не получится, только написанием кода. Код должен будет тоже запускаться вручную, скорее всего. И чтобы он работал правильно необходимо точно знать, какие поля должны быть изменены, а какие трогать нельзя.


Название: Re:самообновляемое поле дата - MS Word
Отправлено: anton-diz от 09.06.2018, 10:54:34
поле типа ДАТА и обновляться должны все поля Y,X,Z ...... n`ое в документе


Название: Re:самообновляемое поле дата - MS Word
Отправлено: Дмитрий Щербаков(The_Prist) от 09.06.2018, 11:29:08
Тогда можно в модуль ThisDocument записать такой код:
Код: (vb)
'---------------------------------------------------------------------------------------
' Author : The_Prist(Щербаков Дмитрий)
'          Профессиональная разработка приложений для MS Office любой сложности
'          Проведение тренингов по MS Excel
'          http://www.excel-vba.ru
'          info@excel-vba.ru
'          WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
' Purpose:
'---------------------------------------------------------------------------------------
Option Explicit
Dim IsNonEvents As Boolean
Private Sub Document_ContentControlOnExit(ByVal ChangedContentControl As ContentControl, Cancel As Boolean)
    If ChangedContentControl.Type <> wdContentControlDate Then
        Exit Sub
    End If
    
    Dim oCCtrl As ContentControl
    Dim v
    If IsNonEvents Then Exit Sub
    v = ChangedContentControl.Range.Text
    IsNonEvents = True
    For Each oCCtrl In ThisDocument.ContentControls
        If oCCtrl.Type = wdContentControlDate Then
            If oCCtrl.Range.Text <> v Then
                oCCtrl.Range.Text = v
            End If
        End If
    Next
    IsNonEvents = False
End Sub

и при изменении любого поля с датой остальным будет назначена та же дата сразу после того, как Вы выйдете из режима редактирования поля.
Во вложении файл с реализацией. Желтые поля - это поля даты, взаимоизменяемые. Макросы должны быть разрешены.