Frage von Joachim30, 75

Wie kann ich eine neue Zeile in Wordformular mit Makro einfügen?

Hallo an alle VBA-Spezialisten,

ich habe ein Wordformular mit einer Tabelle, in der der Nutzer eigentlich nur Felder ausfüllen darf. Allerdings ist es notwendig , dass der Nutzer an jeder x-beliebigen Stelle eine neue Tabellenzeile einfügen kann, die dann die gleichen Formularfelder wie die vorige Zeile enthält. Durch folgendes Makro (danke an die entsprechenden Foren, wo ich es gefunden habe...) werde ich nun schon am Ende der Tabelle gefragt, ob ich eine weitere Zeile anfügen möchte:

Dim response As Integer Dim myTable As Word.Table Dim i As Integer Dim lngRows As Long Dim lngCols As Long Dim LetzteZelle As Word.Cell Dim FFZelle As Word.Cell Dim myFF As Word.FormField Dim rngZelle As Word.Range

' Nachfrage neue Zeile
response = MsgBox("Neue Zeile für Frühdienst einfügen?", vbQuestion + vbYesNo)
   
' Wenn ja neue Zeile einfügen mit Formularfeldern
If response = vbYes Then
       
    ' Dokumentschutz entfernen, vorsichtshalber vorher testen, ob aktiviert
    If ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then
        ActiveDocument.Unprotect
    End If
       
    ' Tabelle eindeutig in Range packen
    Set myTable = Selection.Tables(1)
       
    lngRows = myTable.Rows.Count
    lngCols = myTable.Columns.Count
       
    ' LetzteZelle eindeutig in Range packen
    Set LetzteZelle = myTable.Rows(lngRows).Cells(lngCols)
       
    ' Makro aus der letzten Zelle entfernen
    LetzteZelle.Range.FormFields(1).ExitMacro = ""
       
    ' Neue Zeile einfügen, indem im letzten Feld 1x nach rechts gegangen wird
    ' hat den Vorteil, dass die Zeile DANACH und nicht davor eingefügt wird
    LetzteZelle.Select
    Selection.Collapse wdCollapseEnd
    Selection.MoveRight Unit:=wdCell, Count:=1
               
    ' Formularfelder in die Zellen einfügen
    For i = 1 To lngCols
        Set LetzteZelle = myTable.Rows(lngRows + 1).Cells(i)
        'Aus dem Range muss das Zellenendzeichen ausgeschlossen werden,
        'um den Range in einer Wordtabellenzelle "sauber" zu bilden
        Set rngZelle = ActiveDocument.Range(Start:=LetzteZelle.Range.Start, _
            End:=LetzteZelle.Range.End - 1)
           
        Set myFF = LetzteZelle.Range.FormFields.Add(Range:=rngZelle, _
            Type:=wdFieldFormTextInput)
        With myFF
            '.Name = "xxx" & i
            '.Range.Font.Bold = True
            ' Hier können weitere Eigenschaften des Feldes gesetzt werden
            ' besonders die Name-Eigenschaft ist zum späteren Auswerten sinnvoll
        End With
        ' Makro in die letzte Zeile einfügen
        If i = lngCols Then
            myFF.ExitMacro = "

Wie muss ich es umschreiben (bin leider kein VBA-Held...), damit ich am Ende jeder einzelnen Zeile gefragt werde? Vielen Dank für eure Hilfe!

Antwort
von uni61182, 75

lade das ganze mal formatiert bei pastebin hoch und formuliere deine Frage verständlich

Kommentar von Joachim30 ,

hier der pastebin-upload: http://pastebin.com/ZTzTQg70

Dann versuche ich das noch mal mit dem verständlich erklären:

Ich habe ein geschütztes Word-Formular mit einer Tabelle. Der Nutzer kann die Tabelle dank Formularfeldern in den Zellen ausfüllen. Da es sein kann, dass der Nutzer mehr Zeilen braucht, als in der Vorlage angelegt sind, wird er beim Verlassen der letzten Tabellenzelle mit Hilfe des Makros gefragt, ob eine weitere Zeile eingefügt werden soll. So weit, so gut, das funktioniert.

Nun kann es aber sein, dass mitten in der Tabelle etwas eingefügt werden muss, der Nutzer also an einer x-beliebigen Stelle in der Tabelle eine neue Zeile braucht. Daher möchte ich das Makro so umschreiben, dass der Nutzer beim Verlassen der letzten Zelle jeder Zeile gefragt wird, ob hier eine neue Zeile eingefügt werden soll.

Kurz: wie muss ich das Makro abändern, damit es nicht nur am Tabellenende nachfragt, ob eine weitere Zeile eingefügt werden soll, sondern am Ende jeder Zeile?

Verständlicher? :)

Kommentar von maximilianus7 ,

das entscheidende fehlt: wie wird das macro aufgerufen? eventgesteuert? die sub-anweisung (1. zeile) hätte vielleicht einen hinweis enthalten. oder spielen da noch andere macros mit?

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten