Range des eingefügten Bereichs bestimmen
genau so scheint es.
hab jetzt folgende Funktion, die funktioniert:
welche ich mit
verwenden kann. Das klappt (hey, freu), und schon gibts das nächste Problem.
Das war der Plan
Nur leider ist Range(anfang, anfang+Len(s) um einige Zeichen größer als es sein müsste, und das wirkt sich dummerweise genau auf die Zeilenumbrüche am Ende aus. Es nimmt den Zeilenumbruch+(z. B.) 3 Zeichen des Textes nach der Einfügemarke mit auf. Scheint irgendwie an der Anzahl Zeilenumbrüche in der Zwischenablage zu hängen, wie viele es wirklich sind.
Warum? Wie kann man das ändern?
Variante 2 wäre, erst die Find/Replace auf den String s anzuwenden, und den geänderten dann einzufügen, bzw. wieder zurück ins Clipboard schreiben und danach einzufügen. Aber da wüsste ich nicht wie. Die Methoden kann man nur auf Range-Objekte anwenden.
Außerdem bekomme ich nach meinem Makro, nachdem Replace aktiv war, die Meldung: Es wurden x Ersetzungen durchgeführt. Möchten Sie am Beginn des Dokumentes fortfahren?
Kann man das umgehen, denn ich möchte ja wirklich nur den gewählten Bereich ändern.
Dank Dank und Gruß
elkassi
genau so scheint es.
hab jetzt folgende Funktion, die funktioniert:
Code:
Function GetStringFromClipboard() As String
Dim oData As DataObject
Set oData = New DataObject
oData.GetFromClipboard
On Error Resume Next
strText = oData.GetText
Fehler = Err.Number
strFehler = Err.Description
On Error GoTo 0
Select Case Fehler
Case 0 'Alles paletti
GetStringFromClipboard = strText
Case -2147221404 'Format kann nicht interpretiert werden
MsgBox "Ungültiges Format!", vbExclamation
Exit Function
Case Else 'Ein unbekannter Fehler ist aufgetreten
MsgBox Fehler & vbCr & strFehler, vbExclamation
Exit Function
End Select
End Function
Code:
Dim s As String
s = GetStringFromClipboard()
Das war der Plan
Code:
Sub PasteAndReplace
' Einfügen aus Zwischenablage und alle Absatzmarken durch Zeilenumbrüche ersetzen
' Inhalt aus Zwischenablage holen
Dim s As String
s = GetStringFromClipboard()
' aktuelle Startposition des Cursors merken
Dim anfang As Integer
anfang = Selection.start
' Variante 1
' Zwischenablage im Text Einfügen und den neuen Bereich ändern
Selection.PasteSpecial Link:=False, DataType:=20, Placement:=wdInLine, DisplayAsIcon:=False
' Neu eingefügten Bereich bestimmen: Anfangsposition+Länge des eingefügten Textes
MsgBox anfang
MsgBox Len(s)
Dim r as Range
Set r = ActiveDocument.Range(anfang, anfang+Len(s))
r.Find.Replacement.ClearFormatting
With r.Find
.Text = "^p"
.Replacement.Text = "^l"
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
r.Find.Execute Replace:=wdReplaceAll
End Sub
Warum? Wie kann man das ändern?
Variante 2 wäre, erst die Find/Replace auf den String s anzuwenden, und den geänderten dann einzufügen, bzw. wieder zurück ins Clipboard schreiben und danach einzufügen. Aber da wüsste ich nicht wie. Die Methoden kann man nur auf Range-Objekte anwenden.
Außerdem bekomme ich nach meinem Makro, nachdem Replace aktiv war, die Meldung: Es wurden x Ersetzungen durchgeführt. Möchten Sie am Beginn des Dokumentes fortfahren?
Kann man das umgehen, denn ich möchte ja wirklich nur den gewählten Bereich ändern.
Dank Dank und Gruß
elkassi