1

Тема: Дата/Элемент управления/Будущее

добрый день, подскажате как вставить будущее значение даты в определенное место в документе, при изменении элеметна управления выбор даты

2

Re: Дата/Элемент управления/Будущее

На сайте windowssecrets внешняя ссылка
можно скачать руководство "Microsoft Word Date & Time Calculation Tutorial", автор Paul Edstein [MS MVP - Word] - один из гуру на англоязычных форумах, посвященных Word.

3

Re: Дата/Элемент управления/Будущее

внешняя ссылка там все отталкивается от текущей даты, http://wordexpert.ru/page/vstavka-buduschey-datyi, но как сделать еаподобие такого же с применением эелемента управления дата, т.к. там дату можно выставить любую (прошлую, будущую, текущую)

4

Re: Дата/Элемент управления/Будущее

Jonny_B пишет:

внешняя ссылка там все отталкивается от текущей даты, http://wordexpert.ru/page/vstavka-buduschey-datyi, но как сделать еаподобие такого же с применением эелемента управления дата, т.к. там дату можно выставить любую (прошлую, будущую, текущую)

Вы не очень внимательно читали руководство "Microsoft Word Date & Time Calculation Tutorial", автор Paul Edstein.
Там есть, например, разделы "Interactively Calculate A Past Or Future Date",  "Date and Time Calculations in a Table". В этих разделах имеются демонстрационные примеры полей. ПКМ по полю и в контекстном меню выбрать "Обновить поле", выскочит интерактивное окно, в котором надо ввести начальную дату, в другом окне, которое появится вслед за первым - ввести интервал.

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

Post's attachments

Вычисление будущей даты.docx 40.56 Кб, 5 скачиваний с 2015-05-31 

You don't have the permssions to download the attachments of this post.

5

Re: Дата/Элемент управления/Будущее

Добрый день!!!
Огромнейшее человеческое спасибо !!!!  smile

6

Re: Дата/Элемент управления/Будущее

хм, а как сделать чтобы дата менялась через месяц, два и т.д., а не по дням?

7

Re: Дата/Элемент управления/Будущее

Calculate a month and year, using n months delay - даже в этом пособии при прибавлении будущих месяцев выжает ошибку,

!Синтаксическая ошибка, )-2015

8

Re: Дата/Элемент управления/Будущее

Да, вычисление будущей даты с использованием полей Ворд - "вещь в себе", одна неточность в синтаксисе - и выскакивает сообщение об ошибке.
Можно воспользоваться встроенными функциями VB для работы с датами. Для ваших целей может подойти функция DateAdd
Ниже приведен пример кода из справки, демонстрирующий применение данной функции:

Sub add_date()
'
'Пример вычисления будущей даты
' This example takes a date and, using the DateAdd function,
' displays a corresponding date a specified number of months 
' in the future.
'
Dim FirstDate As Date    ' Declare variables.
Dim IntervalType As String ' "yyyy" Year, "q"  Quarter, "m"  Month,
'                       "y" Day of year, "d"   Day, "w"  Weekday "ww"  Week
Dim Number As Integer
Dim Msg
IntervalType = "m"    ' "m" specifies months as interval.
FirstDate = InputBox("Enter a date")
Number = InputBox("Enter number of months to add")
Msg = "New date: " & DateAdd(IntervalType, Number, FirstDate)
MsgBox Msg
End Sub

9

Re: Дата/Элемент управления/Будущее

все таки с полями было красивее, у меня весь документ на них подвязан  sad

10

Re: Дата/Элемент управления/Будущее

как с помощью данного макроса обратиться к полям, наподобие того как вы сделали ранее?

11

Re: Дата/Элемент управления/Будущее

вот решение, сделано через календарь, работает )))  smile  smile  smile  smile

12

Re: Дата/Элемент управления/Будущее

smile

13

Re: Дата/Элемент управления/Будущее

наконецто получилось загрузить файл )))

Post's attachments

дата через месяц.docx 21.93 Кб, 3 скачиваний с 2015-06-09 

You don't have the permssions to download the attachments of this post.

14

Re: Дата/Элемент управления/Будущее

Jonny_B пишет:

как с помощью данного макроса обратиться к полям, наподобие того как вы сделали ранее?

Вот пример макроса.

Sub FUTURE_DATE()
'
' FUTURE_DATE Макрос
'Вычисление будущей даты через определенное количество месяцев
'Значения начальной и вычисленной дат находятся в элементах управления "Календарь"
'с именами "начальная дата","конечная дата".
'Значение интервала дат находится в элементе управления "Текст" или "Форматированный текст"
'Элементы управления с указанными именами должны быть созданы в документе до начала работы макроса
Dim MyDate              ' Declare variables.
Dim s As String: Dim s1 As String: Dim s2 As String
s = "начальная дата"    '
s1 = "конечная дата"    '
s2 = "интервап"         '
Dim FirstDate As Date
Dim IntervalType As String
Dim Number As Integer
'
IntervalType = "m"    ' "m" specifies months as interval.
FirstDate = ActiveDocument.SelectContentControlsByTitle(s).Item(1).Range.Text
Number = ActiveDocument.SelectContentControlsByTitle(s2).Item(1).Range.Text
ActiveDocument.SelectContentControlsByTitle(s1).Item(1).Range.Text = DateAdd(IntervalType, Number, FirstDate)
'
End Sub

15

Re: Дата/Элемент управления/Будущее

Добрый вечер! спасибо большое, решил с помощью полей  smile

16

Re: Дата/Элемент управления/Будущее

Jonny_B пишет:

вот решение, сделано через календарь, работает )))  smile  smile  smile  smile

Jonny_B, поздравляю. Судя по количеству смайликов вы успешно решили очень важную для себя задачу smile .
Ниже приведены  два макроса для работы с полями Ворд, которые могут помочь пользователям Ворд в обмене информацией о кодах полей, особенно многоэтажных, как в приведенном вами документе.
Автор макросов - Graham Mayor - MS MVP (Word). На его сайте  внешняя ссылка/ можно найти еще много интересных материалов.
Первый макрос FieldCodeToString преобразует коды полей в гладкий текст, в котором текст кодов полей заключен в обычные фигурные скобки. Такой текст можно, например, вставить в сообщение на форум, что мною и сделано для демонстрации возможностей макроса (см. в конце сообщения).
Второй макрос FieldStringToCode выполняет обратную задачу - преобразует гладкий текст, в котором коды полей заключен в фигурные скобки, набранные с клавиатуры, в работающие поля Ворд.

Sub FieldCodeToString()
'Автор: Graham Mayor - MS MVP (Word)
'Опубликовано на сайте  http://www.gmayor.com/export_field.htm
Dim oRng As Range
Dim Fieldstring As String
Dim NewString As String
Dim CurrChar As String
Dim CurrSetting As Boolean
Dim fcDisplay As Object
Dim MyData As DataObject
Dim X As Long
NewString = ""
Set fcDisplay = ActiveWindow.View
Application.ScreenUpdating = False
CurrSetting = fcDisplay.ShowFieldCodes
If CurrSetting <> True Then fcDisplay.ShowFieldCodes = True
Set oRng = Selection.Range
Fieldstring = oRng.Text
For X = 1 To Len(Fieldstring)
CurrChar = Mid(Fieldstring, X, 1)
Select Case CurrChar
Case Chr(19)
CurrChar = "{"
Case Chr(21)
CurrChar = "}"
Case Else
End Select
NewString = NewString + CurrChar
Next X
oRng.Text = NewString
Set MyData = New DataObject
MyData.SetText NewString
MyData.PutInClipboard
fcDisplay.ShowFieldCodes = CurrSetting
End Sub
Sub FieldStringToCode()
'Автор: Graham Mayor - MS MVP (Word)
'http://www.gmayor.com/export_field.htm

' Based on a macro provided by Paul Edstein
' Converts "textual" field codes into real field codes
' To do the conversion, simply paste the "textual" field codes
' into your document, select them and run the macro.
Dim RngFld As Range
Dim RngTmp As Range
Dim oFld As Field
Dim StrTmp As String
Dim sUpdate As String
Dim bFldCodes As Boolean
Const Msg1 = "Select the text to convert and try again."
Const Msg2 = "There are no field strings in the selected range."
Const Msg3 = "Unmatched field brace pairs in the selected range."
Const Title1 = "Error!"
Const Title2 = "Update fields?"
Application.ScreenUpdating = False
bFldCodes = ActiveDocument.ActiveWindow.View.ShowFieldCodes
If Selection.Type <> wdSelectionNormal Then
MsgBox Msg1, vbExclamation + vbOKOnly, Title1
Exit Sub
End If
If InStr(1, Selection.Text, "{") = 0 Or InStr(1, Selection.Text, "}") = 0 Then
MsgBox Msg2, vbCritical + vbOKOnly, Title1
End If
If Len(Replace(Selection.Text, "{", vbNullString)) <> Len(Replace(Selection.Text, "}", vbNullString)) Then
MsgBox Msg3, vbCritical + vbOKOnly, Title1
Exit Sub
End If
ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
Set RngFld = Selection.Range
With RngFld
.End = .End + 1
Do While InStr(1, .Text, "{") > 0
Set RngTmp = ActiveDocument.Range(Start:=.Start + InStr(.Text, "{") - 1, End:=.Start + InStr(.Text, "}"))
With RngTmp
Do While Len(Replace(.Text, "{", vbNullString)) <> Len(Replace(.Text, "}", vbNullString))
.End = .End + 1
If .Characters.Last.Text <> "}" Then .MoveEndUntil cset:="}", Count:=Len(ActiveDocument.Range(.End, RngFld.End))
Loop
.Characters.First = vbNullString
.Characters.Last = vbNullString
StrTmp = .Text
Set oFld = ActiveDocument.Fields.Add(Range:=RngTmp, Type:=wdFieldEmpty, Text:="", PreserveFormatting:=False)
oFld.Code.Text = StrTmp
End With
Loop
ActiveDocument.ActiveWindow.View.ShowFieldCodes = bFldCodes
.End = .End - 1
If bFldCodes = False Then .Fields.ToggleShowCodes
.Select
End With
Application.ScreenUpdating = True
sUpdate = MsgBox("Do you wish to update the fields?" & vbCr + vbCr & _
"Note that if the converted fields include ASK or FILLIN fields, " & _
"updating will force the prompt for input to those fields", vbYesNo, Title2)
If sUpdate = vbYes Then RngFld.Fields.Update
Set RngTmp = Nothing
Set RngFld = Nothing
Set oFld = Nothing
End Sub

Ниже приведен текст с кодами полей из документа, выложенного Jonny_B. Данный текст получен в результате работы макроса  FieldCodeToString.
Теперь можно скопировать этот текст в документ Ворд, выделить его и запустить макрос FieldStringToCode, чтобы преобразовать гладкий текст в работающие поля Ворд.
Обратите внимание на Примечание, добавленное мною (набрано жирным текстом). Если перед выполнением макроса не отметить закладкой дату после слова "Сегодня", то при выполнении макроса во время обновления полей возникнет ошибка, т.к на эту закладку ссылаются коды полей.

ДОКУМЕНТ !!!!!!!!!
Сегодня 09.06.2015  Примечание: в оригинальном документе дата после слова «Сегодня» находится в элементе управления содержимым «Дата» и помечена закладкой с именем «DToday»

Через  месяц   {QUOTE
{SET Delay 1}
{SET mm{=MOD(ABS({DToday \@ M}+Delay+11);12)+1}}
{SET yy{=INT({DToday \@ yyyy}+(Delay+{ DToday \@ M}-1)/12)}}
{SET dd{=IF(({DToday \@ d}>28)*
({mm \@  M}=2)=1;28+((MOD(yy;4)=0)+(MOD(yy;400)=0)-(MOD(yy;100)=0));IF(({mm \@ M}=4)+({mm \@ M}=6)+({mm \@ M}=9)+({mm \@ M}=11)+({ DToday \@ d}>30)>1;30;{ DToday \@ d}))}}
"{dd}-{mm}-{yy}" \@ "dd.MM.yyyy"}   (тут  число  через  месяц)


Завтра: {QUOTE
{SET Delay 1}
{SET a{=INT((14-{DATE \@ M})/12)}}
{SET b{={DATE \@ yyyy}+4800-a}}
{SET c{={DATE \@ M}+12*a-3}}
{SET d{DATE \@ d}}
{SET jd{=d+INT((153*c+2)/5)+365*b+INT(b/4)-INT(b/100)+INT(b/400)-32045+Delay}}
{SET e{=INT((4*(jd+32044)+3)/146097)}}
{SET f{=jd+32044-INT(146097*e/4)}}
{SET g{=INT((4*f+3)/1461)}}
{SET h{=f-INT(1461*g/4)}}
{SET i{=INT((5*h+2)/153)}}
{SET dd{=h-INT((153*i+2)/5)+1}}
{SET mm{=i+3-12*INT(i/10)}}
{SET yy{=100*e+g-4800+INT(i/10)}}
"{dd}-{mm}-{yy}" \@ "dd.MM.yyyy"}  ( тут должно  быть  завтрашнее  число )


Через  год   {QUOTE
{SET Delay 1}
{SET yy{={DATE \@ yyyy}+Delay}}
{SET mm{={DATE \@ M}}}
{SET dd{={DATE \@ d}-({DATE \@ d}>28)*({DATE \@ M}=2)*((MOD(yy;4)>0)+(MOD(yy;400)>0)-(MOD(yy;100)>0))}}
"{dd}-{mm}-{yy}" \@ "dd.MM.yyyy"}    (тут  число  через  год )

17

Re: Дата/Элемент управления/Будущее

да, спс Вам за помощь, теперь решаю не менее важную задачу http://wordexpert.ru/forum/viewtopic.php?id=2345  smile