Zwischenablage programmieren: Leerzeilen entfernen

Hallo,
ich kopiere aus einer anderen Software ca. 30 ein- bis zweizeilige Tabellen, getrennt durch Leerzeilen in die Zwischenablage.
Ist es per Makro möglich, die Leerzeilen, aus der Zwischenablage zu löschen, bevor ich den restlichen Inhalt in Word einfüge?

Viele Grüße
Hans-Jürgen :smile:

hallo

kurze antwort: ja - es geht

allerdings ist deine frage recht unspezifisch: kannst du makros programmieren, weisst nur nicht, wie man auf das clipboard zugreift? oder brauchst du eine fix-fertige lösung, die out-of-the-box funktioniert?

googlen nach „word vba clipboard“ liefert bereits als ersten treffer ein gutes beispiel, wie man recht einfach auf das clipboard zugreifen kann. allerdings: das windows-clipboard kann daten in vielen verschiedenen formaten gleichzeitig aufnehmen. welche formate reinkommen, entscheidet die anwendung, aus der kopiert wird. üblicherweise kopiert die anwendung die daten in allen formaten rein, die die anwendung irgendwie versteht. kopierst du z.b. im internet explorer daten, so stehen die dann in plain-text, in html, in formatierten text (rtf) und noch ein paar anderen formaten in der zwischenablage. die anwendung, die einfügt, sucht sich aus den vielen formaten jenes raus, dass es am besten versteht. da aber praktisch alle anwendungen plain-text kopieren und einfügen können und das in den meisten fällen auch ausreicht, kommen schon irgendwie alle programme damit zurecht.

in deinem speziellen fall: mehrere zweizeilige tabellen? wie schaut sowas aus? ist das plain-text oder formatierter text? was sind die trennzeichen? und so weiter und so fort.

der zugriff auf das clipboard ist dann einfach, wenn man mit reinem plain-text zu tun hat. bei formatierten text wird es kompliziert. keine ahnung, ob man auf formatierten text überhaupt ohne grobe workarounds herankommt.

eine etwas genauere angabe und du erhältst spezifischere antworten…

lg
erwin

für’s archiv, nachdem die kommunikation mit dem fragesteller in folge per email erfolgt ist.

folgende lösung hat sich offenbar als brauchbar für die problemstellung erwiesen:

Sub TabEinfügen()
Dim Anzahl As Integer
Dim Index As Integer
Dim Start As Long
Dim Ende As Long
Dim Bereich As Range

Application.ScreenUpdating = False
Documents.Add DocumentType:=wdNewBlankDocument
Selection.Paste

Anzahl = ActiveDocument.Tables.Count
If Anzahl > 0 Then
For Index = Anzahl To 1 Step -1
If Index = Anzahl Then
’ lösche alles danach
Start = ActiveDocument.Tables.Item(Index).Range.End
Ende = ActiveDocument.Range.End
Set Bereich = ActiveDocument.Range(Start, Ende)
Bereich.Delete
End If
If Index > 1 Then
’ lösche bis zur vorigen tabelle
Start = ActiveDocument.Tables.Item(Index - 1).Range.End
Ende = ActiveDocument.Tables.Item(Index).Range.Start
Set Bereich = ActiveDocument.Range(Start, Ende)
Bereich.Delete
ElseIf Index = 1 Then
’ lösche bis vor die tabelle
Start = ActiveDocument.Range.Start
Ende = ActiveDocument.Tables.Item(Index).Range.Start
If Ende > Start Then
Set Bereich = ActiveDocument.Range(Start, Ende)
Bereich.Delete
End If
End If
Next

ActiveDocument.Tables.Item(1).Range.Copy
End If
ActiveDocument.Close savechanges:=False
Selection.Paste
Application.ScreenUpdating = True
End Sub

das makro erstellt zuerst ein neues, leeres dokument und fügt den inhalt der zwischenablage ein. ist mind. eine tabelle vorhanden, wird alles vor der ersten tabelle, alles nach der letzten tabelle und alles zwischen den tabellen entfernt. anschließend wird der inhalt des dokuments in die zwischenablage kopiert und der alte inhalt überschrieben.

auf jeden fall wird das neue dokument anschließend geschlossen und der inhalt der zwischenablage ins aktuelle dokument an aktueller position eingefügt.

damit kann man dieses makro immer einsetzen - unabhängig davon, was in der zwischenablage drinnen ist.