Макрос Word, сохраняющий текущий выбор (VBA) - PullRequest
5 голосов
/ 16 июня 2009

У меня есть документ Word, который содержит около 4000 полей формы, которые я должен экспортировать впоследствии в базу данных. Дело в том, что ни в одном из 4000 полей нет информации в поле «Закладка», поэтому я не могу получить информацию, хранящуюся в них.

Я пытаюсь создать макрос, чтобы помочь процессу написания закладки (FormField.Name), но не могу сделать это правильно. Дело в том, что я хочу изменить имена FormFields, содержащиеся в выделении пользователя, и только их. Мне удалось прийти к этому решению:

Sub Macro2()
    Dim myFile As String
    Dim fnum As Integer
    Dim sFileText As String
    Dim currentField As FormField

    myFile = "c:\testMacro.txt"
    fnum = FreeFile()
    Open myFile For Input As fnum

    For Each currentField In Selection.FormFields
        Input #fnum, sFileText

        With currentField
            .StatusText = sFileText
            .OwnStatus = True
        End With

        currentField.Select
        Application.WordBasic.FormFieldOptions Name:=sFileText
    Next currentField
End Sub

Но это не работает, потому что объект Selection изменяется в цикле For Each, а затем содержит только первое FormField выделения.

Итак, вот мой вопрос, есть ли способ сохранить текущий выбор и загрузить его после его изменения.

Я пробовал:

Dim mySelection as Selection
Set mySelection = Selection

Но если я изменю Selection, переменная mySelection также изменится (что вполне нормально ...), и я не нашел способа клонировать объект.

У кого-нибудь есть идеи, как это сделать?

Спасибо

Ответы [ 2 ]

10 голосов
/ 16 июня 2009

Используйте другую ссылку для вашей "копии":

Dim selBkUp As Range
Set selBkUp = ActiveDocument.Range(Selection.Range.Start, Selection.Range.End)

Или используйте дубликат:

Dim selBkUp As Range
selBkUp = Selection.Range.Duplicate
0 голосов
/ 05 октября 2014

Selection.Range автоматически дублируется, поэтому вы можете просто сделать:

Dim selBkUp As Range
Set selBkUp = Selection.Range
...