2009-06-16 28 views
5

Ich habe ein Word-Dokument, das etwa 4000 Formularfelder enthält, die ich anschließend in eine Datenbank exportieren muss. Die Sache ist, dass keines der 4000 Felder eine Information im "Lesezeichen" -Feld hat, daher kann ich die Information nicht in ihnen speichern.Word-Makro, Speichern der aktuellen Auswahl (VBA)

Ich versuche, ein Makro zu erstellen, um den Prozess des Schreibens des Lesezeichens (FormField.Name) zu unterstützen, aber es wird nicht richtig ausgeführt. Die Sache ist, dass ich die Namen der FormFields, die in der Auswahl des Benutzers enthalten sind, und nur sie ändern möchte. Ich habe zu dieser Lösung kommen verwaltet:

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 

Aber es funktioniert nicht, weil das Selection-Objekt in der For Each-Schleife geändert wird und danach es enthält nur die erste Formfield der Auswahl.

Also hier ist meine Frage, gibt es eine Möglichkeit, die aktuelle Auswahl zu speichern und laden Sie es zurück, nachdem Sie es geändert haben.

Ich habe versucht:

Dim mySelection as Selection 
Set mySelection = Selection 

Aber wenn ich die getroffene Auswahl zu ändern, wird die Variable MySelection ändert auch (was ganz normal ist ...) und ich fand keinen Weg, um das Objekt zu klonen .

Hat jemand eine Idee, wie man das macht?

Dank

Antwort

10

Verwenden Sie eine andere Referenz für Ihre "Kopie":

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

Oder ein Duplikat verwenden:

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

Selection.Range ist automatisch ein Duplikat, so dass Sie nur tun können:

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