Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA zu Position scrollen lassen

433 views
Skip to first unread message

Hans Alborg

unread,
Dec 7, 2014, 8:59:07 AM12/7/14
to
Hallo,

Über meiner großen Simulationstabelle starte ich manchmal ein Userförmchen
mit einem Textfeld und einem Button.
Im Textfeld steht z.B. "nächste Aktion: DAS" und der Button heißt "weiter".

Nun möchte ich in der Tabelle "DAS" beobachten, nachdem ich "weiter"
gedrückt habe (die Form verschwindet).
Aber "DAS" kann ja gerade nicht im Sichtbereich sein!

Daher muß die Tabelle vorher vertikal und horizontal in Position gebracht
werden damit das Ereignis "DAS" zu beobachten ist.
Position der relevanten Zelle(n) ist bekannt, aber selektieren würde meine
Simu ggf. durcheinanderbringen.

Wie kann ich (nice: verschiedene Monitore/ Auflösungen berücksichtigt)
bezüglich der Zellposition scrollen?

TIA,

Hans

PS: Modeless und per Hand scrollen hab ich verworfen, weil der Code unter
der Form weiterläuft und ich die "DAS"- Sachen verpasse :-/

Claus Busch

unread,
Dec 7, 2014, 9:22:53 AM12/7/14
to
Hallo Hans,

Am Sun, 7 Dec 2014 14:58:48 +0100 schrieb Hans Alborg:

> Nun möchte ich in der Tabelle "DAS" beobachten, nachdem ich "weiter"
> gedrückt habe (die Form verschwindet).
> Aber "DAS" kann ja gerade nicht im Sichtbereich sein!

bist du immer noch an der Simulation?

Was ist "DAS"? Wenn "DAS" ein benannter Range ist, dann geht es z.B.
mit:
Application.Goto "DAS"
Damit kommt "DAS" gerade mal ins sichtbare Fenster.
Genauer geht es dann mit:

With ActiveWindow
.ScrollColumn = Range("DAS").Column
.ScrollRow = Range("DAS").Row
End With

Damit ist "DAS" dann ganz oben und ganz links im Fenster.
Mit zusätzlichen Werten kannst du dann diesen Abstand verfeinern.


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional

Hans Alborg

unread,
Dec 7, 2014, 10:22:03 AM12/7/14
to
Hallo Claus,

"Claus Busch" schrieb...

Hans Alborg:

>> Nun möchte ich in der Tabelle "DAS" beobachten...

> bist du immer noch an der Simulation?

Na klar. Ich bin jetzt allerdings bei den Abläufen unter der Zugfahrt, aber
da geht es nicht so (einfach) geradlinig zu.
Wenn mal alles läuft, ist das erst das Ablaufskelett für weitere spezifische
Schaltungen. Schätze dann sind so 10% fertig.

Aus lauter Ächzen hab ich mir sogar schon eine Userform gemacht, die Relais-
und Kontaktpositionen findet und in richtigen VBA- Code umwandelt! Hat mit
schon sehr geholfen...

> Was ist "DAS"? Wenn "DAS" ein benannter Range ist, dann geht es z.B. mit:
> Application.Goto "DAS"
> Damit kommt "DAS" gerade mal ins sichtbare Fenster.
> Genauer geht es dann mit:

> With ActiveWindow
> .ScrollColumn = Range("DAS").Column
> .ScrollRow = Range("DAS").Row
> End With

> Damit ist "DAS" dann ganz oben und ganz links im Fenster.
> Mit zusätzlichen Werten kannst du dann diesen Abstand verfeinern.

"DAS" ist ein Text in der Userform- Textbox, z.B. "Relais X kommt jetzt zum
Anzug", wonach dieses Ereignis dann beobachtet werden kann (nach Klick auf
"weiter").
Es ist halt so, daß die Orte der Abläufe in der Simulation in diesem
Abschnitt -äh- hin und herspringen.
Wie gesagt, ist aber die Zellposition bekannt, s. mein Code.

Ich hab inzwischen auch einen Einzeiler gefunden:
Application.Goto Reference:=mySheet. _
Cells(199, myNr + 1), Scroll:=True
Auch hier könnte ich mit Offsetzahlen die Position verfeinern.

Leider wird aber die Zelle markiert (selektiert?), kann ich sooo nicht
gebrauchen. Manche Zellen in der Simu sind ja kitzlich...

Jetzt teste ich mal Deinen Code, ob der selektiert.

Evtl. geht was mit ScrollWith(n) oder so?

Hans

Hans Alborg

unread,
Dec 7, 2014, 10:50:08 AM12/7/14
to
"Claus Busch" schrieb...

> With ActiveWindow
> .ScrollColumn = Range("DAS").Column
> .ScrollRow = Range("DAS").Row
> End With

> "Hans Alborg" schrieb...

>> Jetzt teste ich mal Deinen Code, ob der selektiert.

Es selektiert nicht!
Hurra!!!

ScrollColumn und ScrollRow gebe ich nur als Zahlen an.
Jetzt probier ich mal wie ich das in eine Zeile bekomme.

Danke, Problem gelöst :-)

Hans

Claus Busch

unread,
Dec 7, 2014, 10:55:22 AM12/7/14
to
Hallo Hans,

Am Sun, 7 Dec 2014 16:49:51 +0100 schrieb Hans Alborg:

> Jetzt probier ich mal wie ich das in eine Zeile bekomme.

du kansnt Anweisungen mit Doppelpunkt trennen. Allerdings musst du dann
immer ActiveWindow vorstellen, weil du in einer Zeile nicht mit With
arbeiten kannst.
Probiere es mal so:

ActiveWindow.ScrollColumn = 12: ActiveWindow.ScrollRow = 200

Hans Alborg

unread,
Dec 7, 2014, 1:15:55 PM12/7/14
to
"Claus Busch" schrieb...

> Probiere es mal so:
> ActiveWindow.ScrollColumn = 12: ActiveWindow.ScrollRow = 200

Genauso hab ich das gemacht.

Es ist garnicht gut, jedesmal eine genaue Position zu setzen wenn die Form
auftaucht, das hüpft zu nervig hin und her. Da ist schon viel Fingerspitze
angebracht um das einzuschränken.
Manchmal ist ja scrollen gar nicht nötig!

Ich grüble noch, einen dicken Pfeil auf die relevante Stelle zu richten oder
evtl. einen Rahmen, und den (obwohl alleinstehend im Blatt) mit der Userform
zusammen zu erzeugen. Dann fällt der Blick sofort auf das Wesentliche.
Ja, ein flexibel großer Rahmen wär was!

Der Pfeil/ Rahmen verschwindet dann gleich, die Userform aber erst nach ca.
2 Sekunden, damit man noch "bequem" sehen kann was dann passiert ehe der
Code fortsetzt.

Na, viel fummeln, viel Spaß!

Hans

0 new messages