2009-06-16 13 views
5

Ho un documento Word che contiene circa 4000 campi modulo che devo esportare in seguito in un database. La questione è che nessuno dei 4000 campi ha un'informazione nel campo "Segnalibro", quindi non riesco a ottenere le informazioni memorizzate in essi.Word macro, memorizzazione della selezione corrente (VBA)

Sto cercando di creare una macro per facilitare il processo di scrittura del segnalibro (FormField.Name) ma non riesco a farlo correttamente. La questione è che voglio cambiare i nomi dei FormField contenuti nella selezione dell'utente e solo loro. Sono riuscito a venire a questa soluzione:

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 

Ma non funziona, perché l'oggetto di selezione viene modificato nel ciclo For Each e poi contiene solo il primo FormField della selezione.

Quindi ecco la mia domanda, c'è un modo per salvare la selezione corrente e caricarla dopo averla modificata.

ho provato:

Dim mySelection as Selection 
Set mySelection = Selection 

Ma se cambio la selezione, la mySelection variabile cambia così (che è abbastanza normale ...) e non ho trovato un modo per clonare l'oggetto .

Qualcuno ha un'idea su come farlo?

Grazie

risposta

10

utilizzare un riferimento diverso per il "copia":

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

Oppure utilizzare un duplicato:

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

Selection.Range è automaticamente un duplicato, così appena si può fare:

Dim selBkUp As Range 
Set selBkUp = Selection.Range