2014-02-05 4 views
-2

Мне нужно заменить текст в цитате Word. Так как цитаты только для чтения, мне нужно удалить старые цитаты и создать новую после этого:Создайте новый объект Range в Word VBA

 Set r = fld.Result 
     s = fld.Code.Text 
     fld.Cut 
     r.Fields.Add r, wdFieldCitation, s, False 

Проблема заключается в том, что я не могу редактировать текст в r (или fld.Result), поэтому мне нужно создайте новую переменную Range с новым текстом, но я не нашел никаких способов сделать это. Как я могу создать съёмный клон данной переменной Range в VBA?

UPD: Вот сломанный код, который я написал, чтобы заменить Цитирование поля

Sub UpdateCitations() 
    Dim fld As Field 
    Dim s As String 
    Dim r As Range 
    For Each fld In ActiveDocument.Fields 
     If fld.Type = wdFieldCitation Then 
      If fld.Result.Text = "[Please use macros to update citations]" Then 
       Dim citationId As Integer 
       citationId = FindCitationIndex(Split(fld.Code.Text, " ")(2)) 
       Set r = fld.Result 
       ' Here I need to edit the r.Text variable, but I get error 6124, 
       ' because fld.Result.Text is read-only in citaion fields 
       ' r.Text = "Citation changed" 
       s = fld.Code.Text 
       fld.Cut 
       r.Fields.Add r, wdFieldCitation, s, False 
      End If 
     End If 
    Next 
End Sub 

Function FindCitationIndex(ByVal tag As String) As Integer 
    Dim src As Source 
    Dim counter As Integer 
    counter = 1 
    For Each src In ActiveDocument.Bibliography.Sources 
     If src.tag = tag Then 
      FindCitationIndex = counter 
     End If 
     counter = counter + 1 
    Next 
End Function 

UPD2

Моя задача состоит в том, чтобы создать макрос или стиль библиографии, который может быть отсортирован alhabetically или по эталонному порядку. Цитирования должны быть численными.

Мне удалось создать стиль библиографии, который будет сортировать источники так, как мне нужно, но я не смог получить индекс источника в библиографии в XSLT, поэтому я решил поместить сообщение [Please use a macro to update citations] и позже замените это сообщение фактическим индексом макросом, но я не мог ни редактировать, ни создавать новые поля цитирования. Я управляю Office 2010.

+1

Я хотел бы помочь вам, но вы можете добавить больше контекста к своему вопросу. Трудно понять, что здесь происходит в вашем коде. Что такое 'r?', Что такое 'fld', я имею в виду, какие типы данных. Пожалуйста, добавьте дополнительную информацию –

+0

@mehow Я добавил код, который я написал. 'r' - объект' Range', а 'fld' -' Поле' –

ответ

0

Я согласен с @Mehow, есть какая-то важная информация отсутствует. Но попробовать с этим изменил последнюю строку кода:

r.Fields.Add r, , s, False 
+0

Благодарим за ответ, но это не решило мою проблему. Я добавил код, который я написал, возможно, это поможет. –

+0

все переменные -r, fld' точно такие же, как я предполагал, и он отлично работает для меня. Какую ошибку/неожиданное поведение вы получаете? Какую версию Office вы запускаете? –

+0

еще одна вещь - я пытался сделать замену для всех полей, которые не подходят для меня с 'Для каждого цикла'. Я должен был использовать 'For i = Activedocument.Fields.count до 1 шага -1', чтобы поймать все поля! –

0

Вы можете установить стиль, который вы хотите на быстрых стилей слова, и их программно применить его к вашим цитатам с помощью команды:

Sub FormatSelection() 
    Dim objWord As New Word.Application 
    Dim wordDoc As Word.Document 
     Set wordDoc = objWord.Documents.Open(MSWordPath) 'Replace it with the File Path 
     'The Selection could be made by the command wordDoc.Paragraphs(PositionReference).Range.Select or by any other select method 
     With objword.Selection 
      .Style = SourceDoc.Styles(ItemHeaderStyle)'Style you've created for this purpose 
     End with 
End Sub 
Смежные вопросы