AW: shape per VBA immer in der Mitte einfügen
08.10.2007 21:02:54
Daniel
Hi
ein Shape in der Bildschirmmitte des Monitors einzufügen wird sehr aufwendig, da sich das Bezugsssystem für die Shape-Koordinaten das Excelfenster ist, d.h. der Punkt (0 / 0) ist immer linke obere Ecke der Zelle A1.
Um jetzt den Shape in der Bildschirmmitte zu positioneren, müsstest du erst die Bildschirmposition der Applikation, die Postiion des Aktiven Fensters innerhalb der Applikation sowie den Scrollzustand des Aktiven Fensters ermitteln, um daraus irgendwie die Koordinaten der Bildschirmmitte zu bekommen.
Wesentlich einfacher sieht die Sache aus, wenn du deine Anforderung auf "in die Mitte des aktiven Excel-Fensters" beschränkst.
du kannst mit den Funktionen:
ActiveWindow.VisibleRange.top
ActiveWindow.VisibleRange.left
die Koordinaten der Linken oberen Ecke des sichtbaren bereiches abfragen, und mit
ActiveWindow.VisibleRange.Width
ActiveWindow.VisibleRange.Height
die Höhe und die Breite des sichtbaren Bereichs abfragen.
damit solltest du in der Lage sein, die erforderlichen Koordinaten zu berechnen, um dein Shape in der Mitte des sichtbaren Bereichs zu plazieren.
(Berechnungsformel für die X-Position wäre:
Links sichtbarer Bereich + (Breite sichtbarerer Bereich - Breite Shape) /2
die Höhe dann ähnlich.
Allerdings gilt das dann nur für den aktuellen Scrollzustand.
Wenn du jetzt im Tabellenblatt herumscrollst, verschiebt sich natürlich auch das Shape, weil das Bezugssysstem ja die Zellen sind
Soll das Shape wie eine Symbolleiste oder eine Userform immer sichtbar bleiben, müsstest du ein Eventgesteuertes Makro schreiben, das das Shape immer wieder neu positioniert.
Da meines Wissen nach für das Scrollen noch kein Event gibt, musst du hier wahrscheinlich auf SelectionChange zurürckgreifen.
Gruß, Daniel