Zwischenablage modifizieren

Range des eingefügten Bereichs bestimmen

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
welche ich mit
Code:
Dim s As String
s = GetStringFromClipboard()
verwenden kann. Das klappt (hey, freu), und schon gibts das nächste Problem.
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
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
 
Bei dem Range hab ich kA, da ich das Teil noch nie gesehn hab.

Bei der Meldung könnte es genügen, vor dem Ersetzen den Cursor auf Position 1 (also ganz an den Anfang) zu setzen.

mfg
Mafu
 
Ne, glaube ich nicht. Ich will ja mitten in einem Dokument etwas einfügen und in diesem neu eingefügten Bereich die Änderungen machen.
 

Neue Beiträge

Zurück