Тема: Дата/Элемент управления/Будущее
добрый день, подскажате как вставить будущее значение даты в определенное место в документе, при изменении элеметна управления выбор даты
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
добрый день, подскажате как вставить будущее значение даты в определенное место в документе, при изменении элеметна управления выбор даты
На сайте windowssecrets внешняя ссылка
можно скачать руководство "Microsoft Word Date & Time Calculation Tutorial", автор Paul Edstein [MS MVP - Word] - один из гуру на англоязычных форумах, посвященных Word.
внешняя ссылка там все отталкивается от текущей даты, http://wordexpert.ru/page/vstavka-buduschey-datyi, но как сделать еаподобие такого же с применением эелемента управления дата, т.к. там дату можно выставить любую (прошлую, будущую, текущую)
внешняя ссылка там все отталкивается от текущей даты, 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, чтобы сослаться на помеченные закладками элементы управления в документе.
Добрый день!!!
Огромнейшее человеческое спасибо !!!!
хм, а как сделать чтобы дата менялась через месяц, два и т.д., а не по дням?
Calculate a month and year, using n months delay - даже в этом пособии при прибавлении будущих месяцев выжает ошибку,
!Синтаксическая ошибка, )-2015
Да, вычисление будущей даты с использованием полей Ворд - "вещь в себе", одна неточность в синтаксисе - и выскакивает сообщение об ошибке.
Можно воспользоваться встроенными функциями 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
все таки с полями было красивее, у меня весь документ на них подвязан
как с помощью данного макроса обратиться к полям, наподобие того как вы сделали ранее?
вот решение, сделано через календарь, работает )))
наконецто получилось загрузить файл )))
как с помощью данного макроса обратиться к полям, наподобие того как вы сделали ранее?
Вот пример макроса.
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
Добрый вечер! спасибо большое, решил с помощью полей
вот решение, сделано через календарь, работает )))
![]()
![]()
![]()
Jonny_B, поздравляю. Судя по количеству смайликов вы успешно решили очень важную для себя задачу .
Ниже приведены два макроса для работы с полями Ворд, которые могут помочь пользователям Ворд в обмене информацией о кодах полей, особенно многоэтажных, как в приведенном вами документе.
Автор макросов - 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"} (тут число через год )
да, спс Вам за помощь, теперь решаю не менее важную задачу http://wordexpert.ru/forum/viewtopic.php?id=2345
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Дата/Элемент управления/Будущее
Если вы давно работаете с приложением Microsoft Word, то наверняка сталкивались с тем, что многие его вкладки и функции вами не используются и не совсем понятно, как они работают и для чего предназначены. На портале о Microsoft Office Word вы узнаете про: как поставить разные колонтитулы.
Познакомить вас со всеми секретами программы могут на форуме сайта Ворд Эксперт, который и посвящен обсуждению именно тонких настроек и функций. На портале о Microsoft Office Word вы узнаете про: как автоматически нумеровать картинкми. Здесь есть возможность разобраться с шаблонами Ворда, написанием макросов, назначением горячих клавиш, различными способами ускорения и автоматизации операций редактирования и форматирования. Наш сайт о Microsoft Office Word даст ответ про: microsoft word вопросы и ответы.
На Ворд Эксперт вам предложат также готовые решения многих задач или оставить свою заявку на разработку. Наш сайт о Microsoft Office Word даст ответ про: настройка сносок.