Discussion:
VBA zu Position scrollen lassen
(zu alt für eine Antwort)
Hans Alborg
2014-12-07 13:58:48 UTC
Permalink
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
2014-12-07 14:22:53 UTC
Permalink
Hallo Hans,
Post by 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
2014-12-07 15:21:44 UTC
Permalink
Hallo Claus,

"Claus Busch" schrieb...
Post by Claus Busch
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...
Post by Claus Busch
Application.Goto "DAS"
Damit kommt "DAS" gerade mal ins sichtbare Fenster.
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
2014-12-07 15:49:51 UTC
Permalink
"Claus Busch" schrieb...
Post by Claus Busch
With ActiveWindow
.ScrollColumn = Range("DAS").Column
.ScrollRow = Range("DAS").Row
End With
"Hans Alborg" schrieb...
Post by Hans Alborg
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
2014-12-07 15:55:22 UTC
Permalink
Hallo Hans,
Post by 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


Mit freundlichen Grüßen
Claus
--
Vista Ultimate / Windows7
Office 2007 Ultimate / 2010 Professional
Hans Alborg
2014-12-07 17:23:58 UTC
Permalink
"Claus Busch" schrieb...
Post by Claus Busch
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

Lesen Sie weiter auf narkive:
Loading...