2009-06-16 10 views
5

J'ai un document Word qui contient environ 4000 champs de formulaire que je dois exporter ensuite à une base de données. Le fait est qu'aucun des 4 000 champs n'a d'information dans le champ "Bookmark", donc je ne peux pas obtenir les informations qui y sont stockées.macro Word, le stockage de la sélection en cours (VBA)

Je suis en train de créer une macro pour aider le processus d'écriture du signet (FormField.Name) mais ne parvient pas à le faire correctement. Le problème est que je veux changer les noms des FormFields contenus dans la sélection de l'utilisateur, et seulement eux. J'ai réussi à venir à cette solution:

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 

Mais cela ne fonctionne pas, parce que l'objet de sélection est modifiée dans la boucle For Each et ensuite il ne contient que la première FormField de la sélection.

Voici donc ma question, est-il un moyen de sauvegarder la sélection actuelle et le charger de nouveau après avoir changé.

J'ai essayé:

Dim mySelection as Selection 
Set mySelection = Selection 

Mais si je change la sélection, la MySelection variables changements aussi bien (ce qui est tout à fait normal ...) et je ne trouve aucun moyen de cloner l'objet .

Quelqu'un at-il une idée sur la façon de le faire?

Merci

Répondre

10

Utilisez une autre référence pour votre "copie":

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

Ou utiliser un double:

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

Selection.Range est automatiquement un double, vous pouvez juste faire:

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