2015-04-22 2 views
-1

У меня есть множество документов WORD, в которых есть несколько элементов управления содержимым. Я использую файл Excel для обновления документов WORD. Когда я делаю обновление, мне нужно вставить сноску, описывающую изменение. Я могу полностью обновить содержимое Content Control, но у меня возникают проблемы с вставкой сноски. Вот мой код:Невозможно установить сноску в Word doc с помощью Excel VBA

Set cc = oRange.ContentControls(intCounter) 
strOriginalDate = cc.Range.Text 

If wrdDoc.ProtectionType <> wdNoProtection Then 
    wrdDoc.Unprotect strSheetPassword 
End If 

If wrdDoc.FormsDesign = False Then 
    wrdDoc.ToggleFormsDesign 
End If 
cc.Range.Text = strCOD 
' 
' Insert the footnote 
' 
oRange = wrdDoc.Range(cc.Range.End, cc.Range.End) 
oRange.Select 
Selection.MoveRight Units:=wdCharacter, Count:=1 
Selection.TypeText Text:=" " 
With Selection 
    With .FootnoteOptions 
     .Location = wdBottomOfPage 
     .NumberingRule = wdRestartContinuous 
     .StartingNumber = 1 
     .NumberStyle = wdNoteNumberStyleArabic 
     .LayoutColumns = 0 
    End With 
    .Footnotes.Add Range:=cc.Range, Text:="Case Opening Date changed from " & _ 
    strOriginalDate & " to " & strCOD & " on " & Date, Reference:="" 
    End If 
End With 

wrdDoc.ToggleFormsDesign 
wrdDoc.Protect Type:=wdAllowOnlyFormFields, Password:=strSheetPassword 
wrdDoc.Save 

Когда я спускаюсь к линии Selection.MoveRight Units:=wdCharacter, Count:=1, я получаю сообщение об ошибке, которое говорит Object doesn't support this property or method. По сути, я пытаюсь перейти к концу элемента управления, а затем на следующем шаге, я пытаюсь выйти за пределы/вне контроля.

Когда я прокомментирую эту строку и следующую строку, я в конечном итоге пытаюсь вставить сноску в элемент управления контентом. Это выходит из строя на линии With .FootnoteOptions, возможно, потому, что управление содержимым, которое я использую, - это средство выбора даты.

ответ

0

Вы правы, что не можете добавить сноску внутри элемента управления контентом. Решение - это именно то, что вы пытаетесь сделать, - поместите его в документ после. Проблема в том, что вы пытаетесь добавить его с помощью объекта Selection.

Поскольку у вас уже есть диапазон в контексте Документа (оранж), просто работать с ним напрямую:

' 
' Insert the footnote 
' 

'Move the oRange to an "insertion point" after the control. 
oRange.Start = cc.Range.End + 1 
'Collapse it. 
oRange.End = oRange.Start 
'Add your space. 
oRange.Text = " " 

With oRange.FootnoteOptions 
    .Location = wdBottomOfPage 
    .NumberingRule = wdRestartContinuous 
    .StartingNumber = 1 
    .NumberStyle = wdNoteNumberStyleArabic 
    .LayoutColumns = 0 
End With 

oRange.Footnotes.Add Range:=oRange, Text:="Case Opening Date changed from " & _ 
        strOriginalDate & " to " & strCOD & " on " & Date 

Там действительно нет оснований быть отвод вокруг с выбором - это просто прославил Range с дополнительным преимуществом делать все досадные вещи, которые Word делает «для вашей выгоды» (например, захват конечного пространства), когда вы выделяете мышью.

Я также отмечу, что вы можете опустить Reference:="" - по умолчанию он получает пустую строку. У вас также есть плавающий End If внутри вашего блока.

+0

Да, это сделал трюк, спасибо большое. Я использовал кодовую шляпу Word, поэтому я был повесил трубку, используя объект «Выбор». У меня также были проблемы с циклом, который окружал этот код, - столкнулся с проблемами со StoryRanges, что меня тоже сбивало с толку. Дополнительный «End If» от меня «сглаживает» код для представления всем. Так или иначе, теперь все работает, спасибо еще раз! Хихикает ... – Chuck

Смежные вопросы