2009-06-16 40 views
5

Tengo un documento de Word que contiene unos 4000 campos de formulario que luego debo exportar a una base de datos. El asunto es que ninguno de los 4000 campos tiene una información en el campo "Marcador", por lo que no puedo obtener la información almacenada en ellos.Macro de Word, que almacena la selección actual (VBA)

Estoy tratando de crear una macro para ayudar en el proceso de escribir el marcador (FormField.Name) pero no puedo hacerlo bien. El asunto es que quiero cambiar los nombres de los FormFields contenidos en la selección del usuario, y solo ellos. He conseguido llegar a esta solución:

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 

Pero no funciona, porque el objeto de selección se cambia en el bucle For Each y después sólo contiene el primer FormField de la selección.

Así que aquí está mi pregunta, ¿hay alguna manera de guardar la selección actual y volver a cargarla después de haberla cambiado?

He intentado:

Dim mySelection as Selection 
Set mySelection = Selection 

Pero si cambio de la selección, el mySelection variable cambia también (lo cual es bastante normal ...) y no he encontrado ninguna manera de clonar el objeto .

¿Alguien tiene una idea sobre cómo hacer esto?

Gracias

Respuesta

10

utilizar una referencia diferente para su "copia":

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

O utilizar un duplicado:

Dim selBkUp As Range 
selBkUp = Selection.Range.Duplicate 
0

Selection.Range es automáticamente un duplicado, por lo que sólo puede hacer:

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