AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Word VBA Zeile zum oberen Rand scrollen
Thema durchsuchen
Ansicht
Themen-Optionen

Word VBA Zeile zum oberen Rand scrollen

Ein Thema von Amateurprofi · begonnen am 23. Jun 2023 · letzter Beitrag vom 29. Jun 2023
Antwort Antwort
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#1

Word VBA Zeile zum oberen Rand scrollen

  Alt 23. Jun 2023, 16:14
Ich möchte die Zeile in einem Dokument, in der das Eingabe Caret steht, an den oberen Rand des Fensters scrollen.
Mein Ansatz
Code:
   Dim Start As Long
   Start = Selection.Start
   Do While Not (Start ist am oberen Rand)
      Selection.Move Unit:=wdLine, Count:=1
   Loop
Problem:
Wie kann ich ermitteln, ob sich Start am oberen Rand befindet?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Word VBA Zeile zum oberen Rand scrollen

  Alt 27. Jun 2023, 13:32
Wirklich niemand 'ne Idee?
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
ergo2000

Registriert seit: 21. Jan 2013
Ort: Berlin
4 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Word VBA Zeile zum oberen Rand scrollen

  Alt 29. Jun 2023, 10:10
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
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Word VBA Zeile zum oberen Rand scrollen

  Alt 29. Jun 2023, 11:20
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
Angehängte Dateien
Dateityp: zip Help.zip (56,0 KB, 0x aufgerufen)
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#5

AW: Word VBA Zeile zum oberen Rand scrollen

  Alt 29. Jun 2023, 13:37
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.
(Ja ich Verwende Delphi 6 Pro und will NICHT wechseln!)
  Mit Zitat antworten Zitat
ergo2000

Registriert seit: 21. Jan 2013
Ort: Berlin
4 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Word VBA Zeile zum oberen Rand scrollen

  Alt 29. Jun 2023, 13:45
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
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Word VBA Zeile zum oberen Rand scrollen

  Alt 29. Jun 2023, 15:51
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.
Ralph
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.062 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Word VBA Zeile zum oberen Rand scrollen

  Alt 29. Jun 2023, 17:54
@HolgerX, @Ralf,
Danke funktioniert.
Code:
' 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
@Jumpy
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
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz