1

Тема: ВБА остановит время???

имеется поле вида текущая дата, то есть TIME \@ "d MMMM yyyy 'г.'", его перед печатью мне надо остановить при помощи ВБА, как?????

2

Re: ВБА остановит время???

Ципихович Эндрю пишет:

имеется поле вида текущая дата, то есть TIME \@ "d MMMM yyyy 'г.'", его перед печатью мне надо остановить при помощи ВБА, как?????

Так и хочется сослаться на Юпитера smile .
Расскажите, понятнее, в чем состоит задача. Может, все-таки не стоит изменять системное время?

3

Re: ВБА остановит время???

Есть документ в нём есть поле вида TIME \@ "d MMMM yyyy 'г.'",  если ничего не предпринимать и распечатать документ
тогда на бумаге будет всё верно а компьютерном варианте документа дата всегда будет текущая. Вот мне её и надо остановить но не прибегая к Унлинку. Я писал код:

If Trim$(ActiveDocument.Fields(1).Code) Like "*TIME*" Then 
Позиция_начала_поля_TIME = ActiveDocument.Fields(1).Result.Start 
Позиция_конца_поля_TIME = ActiveDocument.Fields(1).Result.End 
Set Поле00 = ActiveDocument.FormFields.Add(Range:=ActiveDocument.Range(Start:=Позиция_начала_поля_TIME, End:=Позиция_конца_поля_TIME), Type:=wdFieldFormTextInput)
ActiveDocument.Bookmarks(Поле00.Name).Delete 'удалить закладку с именем ... НЕ ЛЮБЛЮ ЛИШНИХ ЗАКЛАДОК
Поле00.Result = Format(Date, "d MMMM yyyy г.") 'присваивание текстовому полю ..., значения ...
End If

Прогоняя его пошагово вижу, что всё идёт по плану, но в конечном итого после распечатки поле таким же и осталось TIME \@ "d MMMM yyyy 'г.'", подскажите как решить эту проблему.

4

Re: ВБА остановит время???

После пошагового прогона поле не обновляется, а перед распечаткой обновилось. Ничего удивительного. Но в чем же все-таки задача?  Чем Вас не усраивает применение метода Unlink? Почему нельзя просто вставить дату без всякого поля?

5

Re: ВБА остановит время???

Вы говорите:
После пошагового прогона поле не обновляется, а перед распечаткой обновилось. Ничего удивительного.
Я бы сказал, что я не могу найти никак эту грань сначала всё хорошо, после чего всё отклоняется от задуманного
Нельзя примененять метод Unlink потому что справа от этого поля в котором всегда текущая дата стоят 11 полей макробуттон которые выглядят как >5>4>3>2>1 0 1<2<3<4<5< Нажимая на них это поле, его дата относительно текущей уменьмается или увеличивается на ... дней. Почему нельзя просто вставить дату без всякого поля: потому что у этих макробуттонов инструкция к результату самого левого поля но не макробуттон добавить отнять .. дней и оно может это поле ещё пригодиться.

6

Re: ВБА остановит время???

Наткнулся на вашу тему, возможно вам нужно встроенное в Word поле PRINTDATE.
Формат поля - дата. Word в этом поле хранит и автоматически обновляет последнюю дату печати документа.

Отредактировано motl (24.11.2010 12:34:43)

7

Re: ВБА остановит время???

Насчет

Марк пишет:

TIME @ "d MMMM yyyy 'г.'"

Может я что-то туплю, но по мне это текущее время - оно обязано обновляться.
Еще не пойму - а в какой момент вы его хотите остновить?
Делаете печать - обновится,
Делаете предпросмотр - обновится
Делаете обновление полей F9 - обновится

Так когда?
Если же действительно нужно просто поле с датой, то можно следующее
1) Использовать соответствующие имеющиеся поля, хранящие дату CREATEDATE, PRINTDATE, SAVEDATE
2) Использовать поле {FormText} - на сайте про него писали http://wordexpert.ru/page/table-word2 + Вставка\Дата Время с выкл влажком обновление
3) Использовать Ctrl+F9 -> {} и туда как в 2 вставить Дату + еще раз вставить дату, но уже рядом с полем. Т.о. для печати будет использоваться отображаемый текст, а для перехода - скрытое поле.

Кстати, а что за устройство у вас такое странное - скажите что за доки у вас так организованы - глядишь - пригодится

Делай, что можешь, и будь, что будет!

8

Re: ВБА остановит время???

Этот вопрос подзабыл
Вот строка скрипта
Set Поле00 = ActiveDocument.FormFields.Add(Range:=ActiveDocument.Range(Start:=Поз1, End:=Поз2), Type:=wdFieldFormTextInput)
Её действие в промежутке высчитанным ранее Поз1 и Поз1 добавляется поле, как ещё указать в этой строке свойства добавляемого поля: Тип, Текст по умолчанию, Формат текста????????

9

Re: ВБА остановит время???

Из помощи:

expression.Add(Range, Type)
expression    Required. An expression that returns a FormFields object.

Range   Required Range object. The range where you want to add the form field. If the range isn't collapsed, the form field replaces the range.

Type   Required WdFieldType.The type of form field to add.

Т.е. как я понимаю в одном операторе никак

С колес - Макрорекордер

    Selection.FormFields.Add Range:=Selection.Range, Type:= _
        wdFieldFormTextInput
    Selection.InsertDateTime DateTimeFormat:="M/d/yyyy", InsertAsField:=False, _
         DateLanguage:=wdEnglishUS, CalendarType:=wdCalendarWestern, _
        InsertAsFullWidth:=False

Доработать зубилом и рашпилем wink Удачи

Делай, что можешь, и будь, что будет!

10

Re: ВБА остановит время???

Это не то
Selection.FormFields.Add Range:=Selection.Range, Type:= _
        wdFieldFormTextInput
Строкой выше в месте где стоял курсор вы добавили поле
    Selection.InsertDateTime DateTimeFormat:="M/d/yyyy", InsertAsField:=False, _
         DateLanguage:=wdEnglishUS, CalendarType:=wdCalendarWestern, _
        InsertAsFullWidth:=False
Строкой выше вы правее добавленного поля добавили 11/27/2010
А надо было в том добавленном поле задать его
свойства: Тип, Текст по умолчанию, Формат текста

11

Re: ВБА остановит время???

Эндрю, вы не любопытны smile я же написал

VBA-addict пишет:

Доработать зубилом и рашпилем

немного практики с Макрорекордером + минимум стилистической правки smile

    Selection.FormFields.Add Range:=Selection.Range, Type:= _
        wdFieldFormTextInput
    Selection.MoveLeft Unit:=wdWord, Count:=1, Extend:=wdExtend
    With Selection.FormFields(1)
        .Name = "MyDateField"
        .EntryMacro = ""
        .ExitMacro = ""
        .Enabled = False
        .OwnHelp = False
        .HelpText = ""
        .OwnStatus = False
        .StatusText = ""
        With .TextInput
            .EditType Type:=wdDateText, Default:="11.01.2010", Format:= _
                "DD.MM.YYYY"
            .Width = 0
        End With
    End With

Только уж вместо Default поле вставьте сами - ведь реально так и не понятно - какая же у вас там дата должна жить...

Раз уж есть Макрорекордер - заставьте его работать на вас wink

Отредактировано VBA-addict (30.11.2010 18:01:55)

Делай, что можешь, и будь, что будет!

12

Re: ВБА остановит время???

спасибо большое!!!!

13

Re: ВБА остановит время???

я как мог разбирался с кодом, закомментировал, посмотрите если не сложно правильны ли комметарии
у кое каких строк не понял как закомментировать????
Не подскажете или ссылку дайте пжл
И ещё интерисует Максимальная длина как устанавливается???
Спасибо заранее

Selection.FormFields.Add Range:=Selection.Range, Type:=wdFieldFormTextInput
        With ActiveDocument.FormFields(1)
        .Name = "MyDateField" 'поле Закладка
        .EntryMacro = "" 'поле Выполнить макрос при входе, где указывается имя нужного макроса
        .ExitMacro = "" 'поле Выполнить макрос при выходе, где указывается имя нужного макроса
        .Enabled = False 'включено ???? что
        .OwnHelp = False '????
        .HelpText = "" 'кнопка Текст справки
        .OwnStatus = False '????
        .StatusText = "" '?????
        With .TextInput
             'Type - поле Тип
             'Default - поле Дата по умолчанию
             'Format - поле Формат даты
            .EditType Type:=wdDateText, Default:="11.01.2010", Format:="DD.MM.YYYY"
            .Width = 0 'ширина поля
        End With
        End With

Отредактировано Ципихович Эндрю (30.11.2010 20:15:01)

14

Re: ВБА остановит время???

Там где есть комментарии - все правильно
только .TextInput.Width=0   'unlimited text length - бесконечная длина текстовой строки, которая на поверку имеет ограничение 256 символов внешняя ссылка - т.к. сам не пользую больше не проясню.

.Formfields соответствует нажатию правой кнопки на поле и открытию формы Свойства поля
Покопайтесь там - найдете все соответсвия - у меня англ. офис - не знаю - стоит ли приводить названия элементов здесь - как откроете свойства - легко сопоставите....

еще стоит добавить ActiveDocument.FormFields(1).Update в конец процедуры для автообновления поля после вставки.

Отредактировано VBA-addict (01.12.2010 13:42:46)

Делай, что можешь, и будь, что будет!

15

Re: ВБА остановит время???

с учётом сказанного подправил, а как закомментировать где вопросики ????

'добавить в месте нахождения курсора поле ввода
Selection.FormFields.Add Range:=Selection.Range, Type:=wdFieldFormTextInput
With ActiveDocument.FormFields(1) 'соответствует нажатию правой кнопки на поле и открытию формы Свойства поля
.Name = "MyDateField" 'поле Закладка
.EntryMacro = "" 'поле Выполнить макрос при входе, где указывается имя нужного макроса
.ExitMacro = "" 'поле Выполнить макрос при выходе, где указывается имя нужного макроса
.Enabled = False 'включено ???? что
.OwnHelp = False '????
.HelpText = "" 'кнопка Текст справки
.OwnStatus = False '????
.StatusText = "" '?????
With .TextInput
'Type - поле Тип
'0 - Обычный текст
'1 - Число
'2 - wdDateText, то есть Дата
'3 - Текущая дата
'4 - Текущее время
'5 - Вычесление
'Default - поле Дата по умолчанию
'Format - поле Формат даты
.EditType Type:=wdDateText, Default:="11.01.2010", Format:="DD.MM.YYYY"
.Width = 1 'поле Максимальная длина, то есть ширина поля, имеет ограничение 256 символов
End With
End With
ActiveDocument.FormFields(1).Update 'автообновления поля ... после вставки данных в поля формы поля
Результат_поля = ActiveDocument.FormFields(1).Result

16

Re: ВБА остановит время???

Эндрю, закомментировать строку кода можно так же, как вы добавляете описательный текст (свои комментарии) - добавьте в начало строки значок комментария (клавиша с русской буквой "Э") в латинской раскладке. Или же кликните по кнопке "Comment block" на панели инструментов редактора кода.

17

Re: ВБА остановит время???

вопрос то в том что обозначают эти строки, чо туда именно написать
.Enabled = False 'включено ???? что
.OwnHelp = False '????
.OwnStatus = False '????
.StatusText = "" '?????

18

Re: ВБА остановит время???

Эндрю, так для этого есть справка в редакторе кода. Ставите курсор мыши на нужном свойстве и нажимаете клавишу F1. Появится окно с помощью по данному свойству.
Очевидно и без справки, что свойство Enabled = False означает неактивность.

19

Re: ВБА остановит время???

так то оно так, но у всех строк
.Enabled = False 'включено ???? что
.OwnHelp = False '????
.OwnStatus = False '????
.StatusText = "" '?????
справка:

The keyword you selected can't be found in Visual Basic Help. You may have misspelled the keyword, selected too much or too little text, or asked for help on a word that isn't a valid Visual Basic keyword.

The keyword you want help on may be contained within an object library that is not referenced. Make sure references are set to the appropriate object libraries for all objects used in your code.

The easiest way to get help on a specific keyword is to position the insertion point anywhere within the keyword and press F1. You don't have to select the keyword. In fact, if you select only a portion of the keyword, or more than a single word, Help won't find what you're looking for.

The Value property topic is displayed when you press F1 with the insertion point between the "a" and the "l" in the Value keyword as shown in the following example.

Worksheets(1).Range ("A2").value=3.14159

To use the built-in Help Search, click Microsoft Visual Basic Help on the Help menu.
Грош цена этой справке!!!!!!
И ещё как советовал ВБА аддикт
ActiveDocument.FormFields(1).Update
не пойдёт!!!
Так пойдёт:
ActiveDocument.Fields(1).Update 'автообновления поля ... после вставки данных в поля формы поля

Отредактировано Ципихович Эндрю (02.12.2010 20:44:24)

20

Re: ВБА остановит время???

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