Word宏,存储当前选择(VBA)

时间:2009-06-16 10:05:40

标签: vba ms-word word-vba

我有一个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

但它不起作用,因为在For Each循环中更改了Selection对象,之后它只包含选择的第一个FormField。

所以这是我的问题,有没有办法保存当前选择并在更改后加载它。

我试过了:

Dim mySelection as Selection
Set mySelection = Selection

但是如果我更改了Selection,变量mySelection也会改变(这很正常......)而且我没有找到任何克隆对象的方法。

有人知道如何做到这一点吗?

由于

2 个答案:

答案 0 :(得分:10)

为“副本”使用不同的参考:

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

或使用副本:

Dim selBkUp As Range
selBkUp = Selection.Range.Duplicate

答案 1 :(得分:0)

Selection.Range会自动重复,因此您可以执行以下操作:

Dim selBkUp As Range
Set selBkUp = Selection.Range