Вставьте wdFieldDate в документ Word (2010) с помощью VBA

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

Метод fields.add требует, чтобы я использовал объект диапазона. Следующее просто заменяет первые 10 символов тем, что я хочу, но не в таблице.

Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
    ActiveDocument.Fields.Add rngDoc, wdFieldDate

Я предположил, что следующее сработает, чтобы добавить то же поле в ячейку

Set rngDoc = ActiveDocument.Range(Start:=ActiveDocument.Tables(1).Cell(1, 1).Range.Start, End:=ActiveDocument.Tables(1).Cell(1, 1).Range.End)       
ActiveDocument.Fields.Add rngDoc, wdFieldDate   

Все, что я получаю, это ошибка времени выполнения 4605 - эта команда недоступна

Я думаю, что мой диапазон правильный, как будто я пытаюсь

rngDoc.Bold = True

Ячейка выделена жирным шрифтом.

Любые подсказки


person Quindownunder    schedule 21.08.2014    source источник


Ответы (2)


Свертывание диапазона поможет вам. См. Строку 3 кода.

Dim rngDoc As Range
Set rngDoc = ActiveDocument.Tables(1).Cell(1, 1).Range
rngDoc.Collapse wdCollapseStart
ActiveDocument.Fields.Add rngDoc, wdFieldDate, PreserveFormatting:=True
person cyboashu    schedule 21.08.2014

Установив диапазон ячеек таким образом:

Set rngDoc = ActiveDocument.Range(Start:=ActiveDocument.Tables(1).Cell(1, 1).Range.Start, _
                End:=ActiveDocument.Tables(1).Cell(1, 1).Range.End)

вы пытаетесь перезаписать end cell character, что запрещено.

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

Set rngDoc = ActiveDocument.Range(Start:=ActiveDocument.Tables(1).Cell(1, 1).Range.Start, _
                End:=ActiveDocument.Tables(1).Cell(1, 1).Range.Start)

или .End -1, чтобы поместить ваше поле в целую ячейку, заменив все содержимое ячейки:

Set rngDoc = ActiveDocument.Range(Start:=ActiveDocument.Tables(1).Cell(1, 1).Range.Start, 
                End:=ActiveDocument.Tables(1).Cell(1, 1).Range.End - 1)
person Kazimierz Jawor    schedule 21.08.2014