Advertisement
Guest User

Zeile in Formulartabelle einfügen - Makro

a guest
Mar 15th, 2016
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.78 KB | None | 0 0
  1. Dim response As Integer
  2. Dim myTable As Word.Table
  3. Dim i As Integer
  4. Dim lngRows As Long
  5. Dim lngCols As Long
  6. Dim LetzteZelle As Word.Cell
  7. Dim FFZelle As Word.Cell
  8. Dim myFF As Word.FormField
  9. Dim rngZelle As Word.Range
  10.  
  11. ' Nachfrage neue Zeile
  12. response = MsgBox("Neue Zeile für Frühdienst einfügen?", vbQuestion + vbYesNo)
  13.  
  14. ' Wenn ja neue Zeile einfügen mit Formularfeldern
  15. If response = vbYes Then
  16.  
  17. ' Dokumentschutz entfernen, vorsichtshalber vorher testen, ob aktiviert
  18. If ActiveDocument.ProtectionType = wdAllowOnlyFormFields Then
  19. ActiveDocument.Unprotect
  20. End If
  21.  
  22. ' Tabelle eindeutig in Range packen
  23. Set myTable = Selection.Tables(1)
  24.  
  25. lngRows = myTable.Rows.Count
  26. lngCols = myTable.Columns.Count
  27.  
  28. ' LetzteZelle eindeutig in Range packen
  29. Set LetzteZelle = myTable.Rows(lngRows).Cells(lngCols)
  30.  
  31. ' Makro aus der letzten Zelle entfernen
  32. LetzteZelle.Range.FormFields(1).ExitMacro = ""
  33.  
  34. ' Neue Zeile einfügen, indem im letzten Feld 1x nach rechts gegangen wird
  35. ' hat den Vorteil, dass die Zeile DANACH und nicht davor eingefügt wird
  36. LetzteZelle.Select
  37. Selection.Collapse wdCollapseEnd
  38. Selection.MoveRight Unit:=wdCell, Count:=1
  39.  
  40. ' Formularfelder in die Zellen einfügen
  41. For i = 1 To lngCols
  42. Set LetzteZelle = myTable.Rows(lngRows + 1).Cells(i)
  43. 'Aus dem Range muss das Zellenendzeichen ausgeschlossen werden,
  44. 'um den Range in einer Wordtabellenzelle "sauber" zu bilden
  45. Set rngZelle = ActiveDocument.Range(Start:=LetzteZelle.Range.Start, _
  46. End:=LetzteZelle.Range.End - 1)
  47.  
  48. Set myFF = LetzteZelle.Range.FormFields.Add(Range:=rngZelle, _
  49. Type:=wdFieldFormTextInput)
  50. With myFF
  51. '.Name = "xxx" & i
  52. '.Range.Font.Bold = True
  53. ' Hier können weitere Eigenschaften des Feldes gesetzt werden
  54. ' besonders die Name-Eigenschaft ist zum späteren Auswerten sinnvoll
  55. End With
  56. ' Makro in die letzte Zeile einfügen
  57. If i = lngCols Then
  58. myFF.ExitMacro = "Neue_Zeile_früh"
  59. Set myFF = Nothing
  60. Set rngZelle = Nothing
  61. End If
  62. Next i
  63. ' erste Zelle der letzten Zeile aktivieren
  64. myTable.Rows(lngRows + 1).Cells(1).Select
  65. ' Protect document
  66. ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
  67. Set LetzteZelle = Nothing
  68. Set myTable = Nothing
  69. End If
  70. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement