![]() |
Word VBA Zeile zum oberen Rand scrollen
Ich möchte die Zeile in einem Dokument, in der das Eingabe Caret steht, an den oberen Rand des Fensters scrollen.
Mein Ansatz
Code:
Problem:
Dim Start As Long
Start = Selection.Start Do While Not (Start ist am oberen Rand) Selection.Move Unit:=wdLine, Count:=1 Loop Wie kann ich ermitteln, ob sich Start am oberen Rand befindet? |
AW: Word VBA Zeile zum oberen Rand scrollen
Wirklich niemand 'ne Idee?
|
AW: Word VBA Zeile zum oberen Rand scrollen
Das hier ist vielleicht ein Ansatz.
Im Word-Dokument wird hier nach "ganz oben" oder zum "ersten Wort" gesprungen... var vBookmark,vWhat OleVariant; //an Anfang springen: vBookMark:='\StartOfDoc'; vWhat:=OLEVariant(wdGoToBookmark); WordApplication1.ActiveDocument.Application.Select ion.GoTo_( vWhat, EmptyParam,EmptyParam, vBookMark ); Gruß Ralf |
AW: Word VBA Zeile zum oberen Rand scrollen
Liste der Anhänge anzeigen (Anzahl: 1)
Danke Ralf.
Ist leider nicht das, was ich suche. Ich möchte nicht zum Anfang des Dokuments springen, das wäre ja mit Ctrl-Pos1 leicht zu machen. Was ich möchte ist, das die Zeile, in der das Eingabe Caret steht, so gescrollt wird, dass diese Zeile am oberen Rand des Fensters steht. Hintergrund: Ich habe z.Z. ein Dokument mit > 700 Seiten, das als Source für den Microsoft Help Workshop dient. In dem Dokument sind Links, die auf eine bestimmte Seite des Dokuments verweisen. So ein Link besteht aus einem Text der aus dem Titel einer Seite, gefolgt von der Id der Seite, besteht. Hierbei ist der Teil des Textes, den den Seitentitel zeigt, als unterstrichen formatiert, der Teil der die Id der Seite zeigt, ist als hidden formatiert. Wenn das Caret in solch einem Link steht, kann ich mit einem der Macros in der Vorlage (wird mit Alt-G aufgerufen) zu der Seite springen. Leider erscheint diese dann i.d.R. als unterste Zeile im angezeigten Bereich des Dokuments. Was ich möchte ist, dass die erste Zeile der "angesprungenen" Seite als oberste Zeile im angezeigten Bereich des Dokuments steht. Ich habe mal mein Template für Help-Files angehängt. Meine aktuelle Notlösung ist
Code:
Sub ScrollToTop()
Selection.Move Unit:=wdLine, Count:=10 Selection.Move Unit:=wdLine, Count:=-10 End Sub |
AW: Word VBA Zeile zum oberen Rand scrollen
Hmmm..
Über normale OLE geht es wie folgt:
Code:
WordApp.ActiveDocument.ActiveWindow.ScrollIntoView(r, True);
wobei r hier ein range Object ist. Sprich selectiere z.B. den Anfang deines Bereiches, nehme diese Selection als Range und durch das True bei ScrollIntoView wird dieser Text dann oben angezeigt. |
AW: Word VBA Zeile zum oberen Rand scrollen
Genau, ich schließe mich meinem Vorgänger an.
Wenn Du bereits auf der richtigen DOC-Seite bist, dann sollte: ...Selection.Range.Select; und anschließend: WordApplication1.ActiveWindow.ScrollIntoView( WordApplication1.Selection.Range, True); zum Erfolg führen. Der Bereich muss aber zuvor per Makro markiert werden. Gruß Ralf |
AW: Word VBA Zeile zum oberen Rand scrollen
Als andere Alternative, keine Ahnung ob machbar. Ans Ende des Dokuments springen und erst dann an die gesuchte Stelle. Da man dann von unten kommt, müsste die gefundene Zeile doch am oberen Bildrand sein.
|
AW: Word VBA Zeile zum oberen Rand scrollen
@HolgerX, @Ralf,
Danke funktioniert.
Code:
@Jumpy
' Aktuelle Zeile an oberen Rand scrollen
' Das Caret steht am Anfang der ersten Zeile unter der Seitenüberschrift Sub ScrollToTop() Dim N As Long N = 0 'Do While (N < 50) And (Asc(Selection.Characters.Last) <> 12) ' N<50, falls kein vbFormFeed gefunden wird Do While (N < 50) And (Selection.Characters.Last <> vbFormFeed) ' N<50, falls kein vbFormFeed gefunden wird Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend N = N + 1 Loop ActiveWindow.ScrollIntoView Selection.Range, True Selection.MoveUp Unit:=wdLine, Count:=1 ' In die Seitenüberschrift Selection.MoveDown Unit:=wdLine, Count:=1 End Sub Das ist die optimale Lösung. So einfach, muss man erstmal drauf kommen.
Code:
' Springt zum Topic mit der Id S
Sub JumpToTopic(S As String) Dim FN As Footnote, EN As Endnote ' In Fußnoten suchen For Each FN In ActiveDocument.Footnotes If FN.Range = S Then Selection.EndKey Unit:=wdStory, Extend:=wdMove FN.Reference.Select Selection.HomeKey Unit:=wdLine, Extend:=wdMove Selection.MoveDown 'Auf erste Zeile des Texts Exit Sub End If Next ' Wenn nicht in Fußnoten gefunden, dann in Endnoten suchen For Each EN In ActiveDocument.Endnotes If EN.Range = S Then Selection.EndKey Unit:=wdStory, Extend:=wdMove EN.Reference.Select Selection.HomeKey Unit:=wdLine, Extend:=wdMove Selection.MoveDown 'Auf erste Zeile des Texts Exit Sub End If Next End Sub |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz