none
Seite 2 je nach Auswahl im Dropdown + Inhalte von Textfeldern auf Seite übernehmen RRS feed

  • Frage

  • Hallo zusammen,

    ich habe diese Frage gestern schon in den Answer Foren gestellt, hier der Link dahin zur Info. http://answers.microsoft.com/de-de/office/forum/office_2010-word/seite-2-je-nach-auswahl-im-dropdown-inhalte-von/f00926c0-1cfc-4a2d-8fa6-316590cf65ea

    in einer bestehenden Word 2010 SP2 (32-Bit) Vorlage existieren u.a. ein Dropdown-Feld und ein paar Textformularfelder. Die Vorlage ist wie ein Eingabeformular geschützt, d.h. die Anwender können nur die Formularfelder ausfüllen.

    Nun die Herausforderung:

    Wird im Dropdown-Feld z.B. Zeile 2 ausgewählt, soll das Dokument eine weitere Seite mit teilweise statischem Inhalt bekommen. Den Index bzw. den ausgewählten Text des Dropdown-Feldes bekomme ich damit:

    ActiveDocument.FormFields("Investart").DropDown.ListEntries(1).Name

    alternativ mit

    ActiveDocument.FormFields("Investart").DropDown.Value = 1

    Nun kann ich im VBa-Code mit If <Bedingung> then passend reagieren.

    Mit

    Dim strText As String
    strText = ActiveDocument.Bookmarks("Anschrift").Range.Text

    komme ich an den vorgegebenen Standardtext, bekomme ich so auch später den eingegebenen Text zurück?

    Wird z.B. Eintrag 2 der Dropdown-Box gewählt, soll eine zweite Seite mit teilweise statischem Text erstellt werden, ansonsten soll nichts passieren. Zusätzlich müssen/sollen auf die neue Seite Informationen/Texte aus 4 bestehenden Textformularfeldern der ersten Seite automatisch übertragen werden, wenn sie denn ausgefüllt werden. Dazu gibt es ja in den Eigenschaften der Textformularfelder die Möglichkeit ein Makro beim Ereignis oder beim Beenden aufzurufen. Wäre das der richtige Ort/Punkt um beim 'verlassen' des Textformularfeldes den Inhalt in das Textfeld auf der zweiten Seite zu schreiben?

    Mit

        With Selection
            .EndKey Unit:=wdStory
            .InsertBreak Type:=wdSectionBreakNextPage
        End With

    kann ich ans Ende des Dokumentes springen und einen Seitenumbruch einfügen. Den Text würde ich mir über ein Makro aufzeichnen und abspeichern um es später dann am Ende der Seite einfach ablaufen zu lassen. Wie bekomme ich automatisiert Textformularfelder an die richtige Stelle und wie bekomme ich den Inhalt vom Textformularfeld1 auf Seite 1 in das Textformularfeld1 auf der Seite 2?

    Ist möglicherweise etwas verwirrend, bei Fragen einfach fragen. Vielen Dank schon im Voraus.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Mittwoch, 29. Oktober 2014 09:39

Antworten

  • Die Aufgabe wurde gemeistert und zwar wie folgt.

    Um den Inhalt von Textformularfeld1 auf die zweite Seite zu bringen, ist ein kleiner Trick nötig. Je nach Formularfeld springe ich auf die zweite Seite in die betroffene Zeile, lösch die Zeile komplett raus, erstell sie neu mit dem aktuellen Infos aus dem Textformularfeld1. Das mußte deshalb so gelöst werden, denn wenn der Inhalt vom Textformularfeld1 sich ändert, wurde die Änderung nur an die Zeile auf der zweiten Seite angehängt. Beispielcode:

            'Flackern verhindern
            Application.ScreenUpdating = False
            
            ' Nur aufrufen wenn die zweite Seite vorhanden ist.
            If ActiveDocument.ComputeStatistics(wdStatisticPages) = 2 Then
            
                'Schutz aufheben
                If ActiveDocument.ProtectionType <> wdNoProtection Then
                    ActiveDocument.Unprotect Password:=""
                End If
                
                Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext
                Selection.GoTo What:=wdGoToLine, Which:=wdGoToRelative, Count:=5
                
                strWIE = ActiveDocument.Bookmarks("WI").Range.Text
                strWIE = Replace(strWIE, " FORMTEXT", "", 1, -1, vbTextCompare)
                strWIE = Replace(strWIE, "[Kontierung]", "", 1, -1, vbTextCompare)
                
                With Selection
                    .EndOf Unit:=wdParagraph, Extend:=wdExtend
                    .TypeBackspace
                End With
                Selection.TypeText Text:=""
                Selection.TypeText Text:="Einheit: " & strWIE & vbCrLf
            
                'Dokument wieder schützen
                If ActiveDocument.ProtectionType = wdNoProtection Then
                    ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
                End If
            End If
            Application.ScreenUpdating = True
    

    Die Variable strWIE ist im Modulkopf deklariert. Da das Dokument als Formular geschützt ist, muß der Schutz vor der Verarbeitung deaktiviert und anschließend wieder aktiviert werden.Da es für die Controls in Word nur 2 Möglichkeiten gibt Code zu hinterlegen, ist bei allen der Code beim 'Verlassen' eingefügt.

    Wird die Auswahl im Dropdownfeld im Laufe der Bearbeitung wieder geändert, ist möglicherweise die Seite 2 nicht mehr erforderlich. Dann wird dieser Code ausgeführt:

            'Schutz aufheben
            If ActiveDocument.ProtectionType <> wdNoProtection Then
                ActiveDocument.Unprotect Password:=""
            End If
    
            'Geklaut bei: http://www.vb-magazin.de/forums/forums/t/4518.aspx
            Dim SeitenAnzahl As Integer
            Dim Zeichenwert As Integer
        
            ' *** Auf den Anfang des Dokuments gehen
            Selection.HomeKey Unit:=wdStory, Extend:=wdMove
           
            ' *** Zur Sicherheit neu Durchnummerieren
            ActiveDocument.Repaginate
           
            ' *** Auf den Anfang der letzten Seite gehen
            SeitenAnzahl = Selection.Information(wdNumberOfPagesInDocument)
            Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=SeitenAnzahl
            Selection.Bookmarks("\Page").Range.Delete
        
            ' *** 2 Zeichen zurück gehen
            Selection.MoveLeft Unit:=wdCharacter, Count:=2, Extend:=wdMove
            Zeichenwert = Asc(Selection.Text)
            'MsgBox Zeichenwert
           
            ' *** Test, ob Seitenwechsel (Zeichenwert = 12)
            If Zeichenwert = 12 Or Zeichenwert = 14 Then
                Selection.Delete
            End If
    'Noch zweimal löschen, dann steht der Cursor wieder am richtigen Platz.
            Selection.Delete
            Selection.Delete
        End If
        
        'Dokument wieder schützen
        If ActiveDocument.ProtectionType = wdNoProtection Then
            ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
        End If

    Mit Hilfe eines Userforms könnte man die Aufgabe sicherlich eleganter lösen, aber in diesem Fall reicht das so wie es ist.


    Servus
    Winfried

    Gruppenrichtlinien
    WSUS Package Publisher
    HowTos zum WSUS Package Publisher
    NNTP-Bridge für MS-Foren

    Freitag, 31. Oktober 2014 07:23