2017-05-02 2 views
0

Ich verwende VBA in Word 2016 und ich möchte ein Rechteck der Größe des Absatzes erstellen (ich kann die Rahmenfunktion aus anderen Gründen nicht verwenden).Suchen Bounding Box Dimensionen für einen Absatz (Word VBA)

Ich kann die Position des ersten Zeichens mit diesem Code, aber was ist mit dem unteren und rechten Ende des Absatzes?

x = Selection.Information(wdHorizontalPositionRelativeToPage) 
y = Selection.Information(wdVerticalPositionRelativeToPage) 

Leider ist die folgende nur mein Wunschdenken:

w = Selection.Paragraphs(1).Width 
h = Selection.Paragraphs(1).Height 

Am Ende möchte ich um den Absatz die gleiche Größe wie ein Begrenzungsrahmen ein Rechteck folgendes ausführen zu generieren:

ActiveDocument.Shapes.AddShape msoShapeRectangle, x, y, w, h 

Jede Hilfe wäre willkommen. Vielen Dank!

Antwort

0

Sie sind auf dem richtigen Weg, wenn Sie in dem von Ihrer Auswahl angegebenen Absatz denken. Meine Präferenz ist es, mit dem durch die Auswahl angegebenen Bereich umzugehen, aber das ist eine Frage der persönlichen Präferenz. Jedenfalls kann der Absatz in - unter anderem - ein erstes Zeichen und ein letztes Zeichen unterteilt sein. Wie Sie bereits festgestellt haben, befindet sich die Position des ersten Charakters auf der Seite sehr nahe an der oberen linken Ecke Ihres Rechtecks. Eine ähnliche Beziehung kann für das letzte Zeichen hergestellt werden. Der folgende Code kann Ihnen auf Ihrem Weg helfen.

Private Sub TestPos() 

    Dim Rng As Range 
    Dim x As Single, y As Single 

    Set Rng = Selection.Range 
    Set Rng = Rng.Paragraphs(1).Range 
    With Rng 
     x = .Information(wdHorizontalPositionRelativeToPage) 
     y = .Information(wdVerticalPositionRelativeToPage) 
     Debug.Print x, y 
     .Collapse wdCollapseEnd 
     x = .Information(wdHorizontalPositionRelativeToPage) 
     y = .Information(wdVerticalPositionRelativeToPage) 
     Debug.Print x, y 
     Debug.Print .Paragraphs(1).LineSpacing 
    End With 
End Sub 

Wie für die linke und rechte Seite sollten Sie sich auf die Ränder für den Absatz beziehen. Der folgende Code enthält die Syntax, die Sie benötigen.

Private Sub ShowPageSetup() 

    Dim Rng As Range 

    With ActiveDocument.PageSetup 
     Debug.Print .LeftMargin, .RightMargin 
    End With 
    Set Rng = Selection.Range 
    With Rng.Paragraphs(1).Range.ParagraphFormat 
     Debug.Print .LeftIndent, .RightIndent 
    End With 
End Sub 
Verwandte Themen