есть в ворде табличка в которой просчитывается наработка оборудования, нужно в строках 2,3,8 пересчитать данные на сегодняшний МЕСЯЦ (т.е. на 1 число этого месяца) относительно даты ввода в эксплуатацию (если указано что сентябрь 1990 года - считать что ввод был 01,09,1990). помогите кто чем может пожалуйста
есть в ворде табличка в которой просчитывается наработка оборудования, нужно в строках 2,3,8 пересчитать данные на сегодняшний МЕСЯЦ (т.е. на 1 число этого месяца) относительно даты ввода в эксплуатацию (если указано что сентябрь 1990 года - считать что ввод был 01,09,1990). помогите кто чем может пожалуйстаluny
Предлагаю вариант решения через макрос, который автоматически выполняется при открытии документа. В качестве названий месяцев использовал русские - в соответствии со своей локалью. В этом случае строка "сентябрь 1990" переводится при помощи функции DateValue в корректную дату 01.09.1990. Полагаю, что для правильной работы в украинской локали надо будет восстановить "серпень 1990". Склонениями существительных после чисел не заморачивался, поэтому, например, "годин" (часов) будет подставляться и к 1, и к 2 и к 5. То же касается и лет с месяцами. Если непременно нужны правильные склонения, то это дальнейшая кропотливая работа - дерзайте! Точка с запятой в качестве разделителя фраз про годы и часы в строке "4." обязательна и неизменна.
Понятно, что нужно будет сохранить документ с обновленными ячейками - либо вручную, либо дописать соответствующую строчку в макрос. Но можно и не сохранять, ибо при открытии в файле всегда будут актуальные данные на момент текущего открытия файла. Вот как-то так...
[vba]
Код
Private Sub Document_Open() Call calcDateDiff End Sub
Sub calcDateDiff() Dim arr Dim tbl As table Dim dat1 As Date Dim years As Integer Dim months As Integer Dim allMonths1 As Integer Dim allMonths2 As Integer Dim allMonths3 As Integer Dim hours1 As Long Dim hours2 As Long Dim hours3 As Long
allMonths1 = DateDiff("m", dat1, Now) years = allMonths1 \ 12 months = allMonths1 - years * 12 If months = 0 Then tbl.Cell(3, 3).Range.Text = years & " років" Else tbl.Cell(3, 3).Range.Text = years & " років " & months & " місяців" End If
Предлагаю вариант решения через макрос, который автоматически выполняется при открытии документа. В качестве названий месяцев использовал русские - в соответствии со своей локалью. В этом случае строка "сентябрь 1990" переводится при помощи функции DateValue в корректную дату 01.09.1990. Полагаю, что для правильной работы в украинской локали надо будет восстановить "серпень 1990". Склонениями существительных после чисел не заморачивался, поэтому, например, "годин" (часов) будет подставляться и к 1, и к 2 и к 5. То же касается и лет с месяцами. Если непременно нужны правильные склонения, то это дальнейшая кропотливая работа - дерзайте! Точка с запятой в качестве разделителя фраз про годы и часы в строке "4." обязательна и неизменна.
Понятно, что нужно будет сохранить документ с обновленными ячейками - либо вручную, либо дописать соответствующую строчку в макрос. Но можно и не сохранять, ибо при открытии в файле всегда будут актуальные данные на момент текущего открытия файла. Вот как-то так...
[vba]
Код
Private Sub Document_Open() Call calcDateDiff End Sub
Sub calcDateDiff() Dim arr Dim tbl As table Dim dat1 As Date Dim years As Integer Dim months As Integer Dim allMonths1 As Integer Dim allMonths2 As Integer Dim allMonths3 As Integer Dim hours1 As Long Dim hours2 As Long Dim hours3 As Long
allMonths1 = DateDiff("m", dat1, Now) years = allMonths1 \ 12 months = allMonths1 - years * 12 If months = 0 Then tbl.Cell(3, 3).Range.Text = years & " років" Else tbl.Cell(3, 3).Range.Text = years & " років " & months & " місяців" End If
спасибо, вроде бы то что я и хотел... не будет сбоев в макросе если таблица будет не одна или еще что-либо? зы не совсем понял как заменить русс месяц на укр месяц.
спасибо, вроде бы то что я и хотел... не будет сбоев в макросе если таблица будет не одна или еще что-либо? зы не совсем понял как заменить русс месяц на укр месяц.luny
Сообщение отредактировал luny - Вторник, 01.12.2015, 17:17
не будет сбоев в макросе если таблица будет не одна или еще что-либо?
Разумеется, будут. Процедура рассчитана на одну таблицу в документе под номером 1. Если надо несколько таблиц, то надо добавлять цикл по таблицам. И, честное слово, в этом случае настоятельно рекомендую миграцию с этим бланком в Excel.
не совсем понял как заменить русс месяц на укр месяц
Пуск \ Панель управления \ Часы, язык и регион \ Язык и региональные стандарты \ Формат: Украинский Только не заменить, а "включить" обработку месяцев на украинском языке. В этом случае в Окне отладки будет получаться: ? DateValue("серпень 1990") 01.08.1990
А ? DateValue("сентябрь 1990") вызовет ошибку. А если поставить Формат: Русский, то будет всё с точностью до наоборот.
не будет сбоев в макросе если таблица будет не одна или еще что-либо?
Разумеется, будут. Процедура рассчитана на одну таблицу в документе под номером 1. Если надо несколько таблиц, то надо добавлять цикл по таблицам. И, честное слово, в этом случае настоятельно рекомендую миграцию с этим бланком в Excel.
не совсем понял как заменить русс месяц на укр месяц
Пуск \ Панель управления \ Часы, язык и регион \ Язык и региональные стандарты \ Формат: Украинский Только не заменить, а "включить" обработку месяцев на украинском языке. В этом случае в Окне отладки будет получаться: ? DateValue("серпень 1990") 01.08.1990
А ? DateValue("сентябрь 1990") вызовет ошибку. А если поставить Формат: Русский, то будет всё с точностью до наоборот.Gustav
подумав - в ощем спасибо...думаю что дальше я сам...там действительно в первой таблице все меняется и строки и содержание - разнесу на разные страницы и буду печатать так
еще раз спасибо
подумав - в ощем спасибо...думаю что дальше я сам...там действительно в первой таблице все меняется и строки и содержание - разнесу на разные страницы и буду печатать так
Не знаю. У меня всё хорошо. Раз что-то не так, то надо в отладчике смотреть, что приходит к этому присваиванию в arr(0). Тут мне дистанционно, увы, не помочь... Возможно, после точки с запятой вставили еще перевод строки, а не только пробел. Блин, на этих строчках так всё зыбко... Боюсь, будете иметь регулярные проблемы, если с файлами будет работать толпа пользователей...
Не знаю. У меня всё хорошо. Раз что-то не так, то надо в отладчике смотреть, что приходит к этому присваиванию в arr(0). Тут мне дистанционно, увы, не помочь... Возможно, после точки с запятой вставили еще перевод строки, а не только пробел. Блин, на этих строчках так всё зыбко... Боюсь, будете иметь регулярные проблемы, если с файлами будет работать толпа пользователей...Gustav