Мне нужно заменить текст в цитате 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.
Я хотел бы помочь вам, но вы можете добавить больше контекста к своему вопросу. Трудно понять, что здесь происходит в вашем коде. Что такое 'r?', Что такое 'fld', я имею в виду, какие типы данных. Пожалуйста, добавьте дополнительную информацию –
@mehow Я добавил код, который я написал. 'r' - объект' Range', а 'fld' -' Поле' –