cookie
Goto Top

Zeile per VBA Makro in Word an aktueller Position hinzufügen

Hallo zusammen.

Ich habe ein Problem mit einem VBA Makro in Word 2007.

Ich habe eine Tabelle mit div. Inhalten.

An verschiedenen Positionen müssen Massnahmen oder Aufgaben hinzugefügt werden. Das Makro wird über einen Button gestartet. Nun fügt es mir die Zeile jeweils nicht an der aktuellen Position sondern unterhalb des Buttons ein.
Wie kann ich nun unterhalb meiner aktuellen Position eine neue Zeile einfügen?

Vielen Dank.

Gruss Cookie

Content-ID: 165486

Url: https://administrator.de/forum/zeile-per-vba-makro-in-word-an-aktueller-position-hinzufuegen-165486.html

Ausgedruckt am: 22.12.2024 um 17:12 Uhr

83928
83928 02.05.2011 um 16:30:29 Uhr
Goto Top
Schade, dass Du kein Code gepostet hast.
Das Selection-Objekt hat eine Methode, mit der Du die Zeilenummer (der aktuellen Seite) in der sich der Cursor befindet bestimmen kannst.

Selection.Information(wdFirstCharacterLineNumber)
cookie
cookie 09.05.2011 um 08:36:55 Uhr
Goto Top
Hallo abaaba.

Vielen Dank für den Hinweis.
Mein Problem ist einfach, dass ich die Position beim Drücken auf den Button verliere oder?

Ich führe beim Drücken folgender Befehl aus:
Private Sub NeueMassnahme_Click()
Call ADD_NeueMassnahme
End Sub

Danach wird ADD_NeueMassnahme aufgerufen und dies sieht wie folgt aus:
Sub ADD_NeueMassnahme()
' Dokumentschutz entfernen
ActiveDocument.Unprotect Password:="xxx"
' Position springen
Selection.MoveDown Unit:=wdLine, Count:=1
' Zeile einfuegen
Selection.InsertRowsBelow 1
' Einfuegen NR-Feld
Selection.MoveLeft Unit:=wdCharacter, Count:=1
Selection.Editors.Add wdEditorEveryone
Selection.FormFields.Add Range:=Selection.Range, Type:= _
wdFieldFormTextInput
Selection.PreviousField.Select
With Selection.FormFields(1)
.Name = "Nummer1"
.EntryMacro = ""
.ExitMacro = ""
.Enabled = True
.OwnHelp = False
.HelpText = ""
.OwnStatus = False
.StatusText = ""
With .TextInput
.EditType Type:=wdRegularText, Default:="", Format:=""
.Width = 2
End With
End With
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
Selection.Editors.Add wdEditorEveryone
Selection.MoveRight Unit:=wdCell
' Einfuegen Massnahmen Feld
Selection.FormFields.Add Range:=Selection.Range, Type:= _
wdFieldFormTextInput
Selection.Editors.Add wdEditorEveryone
Selection.MoveRight Unit:=wdCell
' Einfuegen wer
Selection.FormFields.Add Range:=Selection.Range, Type:= _
wdFieldFormTextInput
Selection.MoveRight Unit:=wdCell
' Einfuegen Datum
Selection.Range.ContentControls.Add (wdContentControlDate)
Selection.TypeText Text:=" "
Selection.MoveRight Unit:=wdCharacter, Count:=2
' Einfuegen Status
Selection.Range.ContentControls.Add (wdContentControlComboBox)
Selection.TypeText Text:=" "
Selection.ParentContentControl.Title = "Status"
Selection.ParentContentControl.Tag = "Status"
Selection.ParentContentControl.DropdownListEntries.Clear
Selection.ParentContentControl.DropdownListEntries.Add Text:=" ", _
Value:=""
Selection.ParentContentControl.DropdownListEntries.Add Text:="offen", _
Value:="offen"
Selection.ParentContentControl.DropdownListEntries.Add Text:="in Arbeit", _
Value:="in Arbeit"
Selection.ParentContentControl.DropdownListEntries.Add Text:="erledigt", _
Value:="erledigt"
Selection.MoveRight Unit:=wdCharacter, Count:=2
' Einfuegen Kosten
Selection.FormFields.Add Range:=Selection.Range, Type:= _
wdFieldFormTextInput
' Dokumentschutz einfuegen
ActiveDocument.Protect Password:="xxx", NoReset:=False, Type:= _
wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=False
End Sub

Nur wird mir so die Zeile direkt unterhalb dem Button eingefügt und nicht an der aktuellen Position.
Gibt es hier eine Möglichkeit?

Vielen Dank.

Gruss
83928
83928 09.05.2011 um 13:44:59 Uhr
Goto Top
Mein Problem ist einfach, dass ich die Position beim Drücken auf den Button verliere oder?

Ja, stimmt. Beim Klick sitzt der Focus (und damit die Selection) wieder auf dem Button.
Du kannst Dir hier aber mit einem kleinen, schmutzigen Trick behelfen. Speichere die Zeilennummer zwischen, bevor das Steuerelement den Focus bekommt - hier bietet sich das MouseOver-Ereignis an:

Dim varZeile 'as ???  

Private Sub CommandButton1_Click()
    MsgBox "Aktuelle Zeile ist: " & varZeile  
End Sub

Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 0 Then 'Nur 0 wenn keine Maustaste gedrückt.  
        varZeile = Selection.Information(wdFirstCharacterLineNumber) 'Zeilennummer der Variable zuweisen  
    End If
End Sub