Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Buttons.Add() Button deplaziert

Buttons.Add() Button deplaziert
08.06.2022 19:42:01
faultpax
Ich erzeuge einen Button über ein Makro direkt über der aktiven Zelle mittels
Set NewButton = ActiveSheet.Buttons.Add(ActiveCell.Left + 3, ActiveCell.Top + 3, 60, 20)
Das funktioniert auch in der Regel.
Bloß wenn ich das Excel Window auf meinen zweiten Bildschirm schiebe (extended desktop unter Win10),
dann taucht der button viel zu weit unten im Tabellenblatt auf. Die horizontale Position paßt hingegen in beiden Fällen.
Im Überwachungsfenster erkenne ich beim Debuggen keinerlei Unterschied in den Active.Cell Attributen.
Höchst sonderbar, - kennt jemand dieses Verhalten?

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Buttons.Add() Button deplaziert
08.06.2022 20:44:07
faultpax
Kleine Korrektur:
Im Fehlerfall stimmt die horizontale Position doch nicht ganz.
Der 3 Pixel Offset wird von Excel am zweiten Screen ignoriert.
AW: Buttons.Add() Button deplaziert
09.06.2022 04:17:49
faultpax
Also reagiert das Makro zum Erzeugen der Buttons unterschiedlich,
je nachdem, auf welchem Bildschirm das Excel-Fenster geöffnet ist.
So sieht das aus:
Userbild
Die oberen beiden Button-Paare wurden jeweils auf Bildschirm 1 erzeugt.
Das untere Paar auf Bildschirm 2. Natürlich sollte dieses ebenfalls in der graubraunen Zelle plaziert werden.
Leider landet es viel zu tief sowie ein Spur zu weit links.

Anzeige
AW: Buttons.Add() Button deplaziert
09.06.2022 08:25:33
Berny
Hallo faultpax,
ich habe leider keine Lösung für dich, aber ich kann bestätigen, dass das Verhalten auch bei uns (ca. 50 Mitarbeiter) vorkommt. Ich füge über ein Makro Bilder in ein Arbeitsblatt ein. Wenn das Fenster zum Zeitpunkt des Makro-Start auf dem "falschen" Bildschirm ist, werden die Bilder falsch platziert. Der Fehler wird umso größer, je weiter unten im Arbeitsblatt die Bilder eingefügt werden.
Tipp: Es scheint so zu sein, dass der Bildschirm, welcher unter Windows "Anzeigeeinstellungen" als "Hauptanzeige" ausgewählt ist, für diesen Fall der "führende, richtige" Bildschirm ist. Sprich: bevor du dein Makro startest, muss Dein Fenster mit der Arbeitsmappe auf diesem Bildschirm sein.
M.f.G.
Berny
Anzeige
nur 1 Idee
09.06.2022 09:32:24
Oberschlumpf
Hi,
welche Auflösung ist für "Bildschirm1" + "Bildschirm2" eingestellt?
Ist die Auflösung für "Bildschirm2" kleiner als für "Bildschirm1"?
DAS könnte dann der Grund sein.
Beispiel:
Auflösung "Bildschirm1" = 1920x1080 (1920 Pixel Breite, 1080 Pixel Höhe)
Auflösung "Bildschirm2" = 1024x768 (1024 Pixel Breite, 768 Pixel Höhe), weil Bildschirm2 ist kleiner, deswegen kleinere Auflösung
sooo...
ActiveCell.Top ist z Bsp 960
für Bildschirm1 ist das genau die Mitte (weil 1920 / 2 = 960)
...also wird der neue Button auf Bildschirm1 in der Mitte platziert
Wird nun das Excel-Fenster auf Bildschirm2 rübergeschoben, dann ist ActiveCell.Top noch immer 960!
Aber!!!
Bildschirm2 hat ja in der Höhe maximal nur 1024.
Somit "rutscht" der Button bis fast ganz unten.
Wie im Betreff erwähnt: das ist meine einzige Idee, wieso es zur unterschiedlichen Darstellung kommt.
Wenn beide Monitore die selbe Auflösung haben, dann weiß ich auch nicht weiter.
Hilfts?
Ciao
Thorsten
Anzeige
AW: nur 1 Idee
09.06.2022 11:53:26
faultpax
Tatsächlich, die Bildschirmauflösung der Monitore unterscheiden sich.
Ich will nur nicht recht verstehen, warum das einen Einfluß hat.
Ich setze den Button genau auf die Active.Cell (plus einen minimalen Versatz).
Beim nächsten Aufruf des Makros (auf dem anderen Monitor) setze ich einen neuen Button ebenfalls auf die jeweils aktuelle Active.Cell.
Trotzdem ist eine der beiden Darstellungen versetzt. und der vertikale Versatz wird umso größer, je länger das Tabellenblatt ist.
Das Auslesen von ActiveCell.Top und das Erzeugen des Buttons NewButton erfolgen in der identen Programmzeile.


Anzeige
AW: nur 1 Idee
09.06.2022 15:48:31
Oberschlumpf
Ich will nur nicht recht verstehen, warum das einen Einfluß hat.
Das hatte ich dir erklärt ;-)
Ok, anders:
In jeder Tabelle ist oben links, Zelle A1 Top = 0
je mehr Zeilen du weiter unten die ActiveCell markiert hast, ist Top dann auch viel weiter unten - immer gemessen an Top = 0 = links oben in jeder Tabelle.
Auf meinem PC Unterschied zwischen Zelle A1 und Zelle A2 = 15.
Das erkennst du auch mit Rechtsklick auf eine Zeile und wählst "Zeilenhöhe" aus.
Sooo....angenommen, deine ActiveCell ist jetzt Zelle A500 - was glaubst du, ist der Wert von ActiveCell.Top?
Vorausgesetzt, alle Zeilen haben die Standardhöhe = 15, dann ist Zelle A500.Top = 7485 !
Und jetzt hast du vielleicht verstanden, wieso du bei Bildschirm2 (mit kleiner Auflösung) viel mehr scrollen musst, um A500, bzw deinen neuen Button zu erreichen, als wenn du in Bildschirm1 (mit hoher Auflösung) bis Zelle A500 scrollst.
Anders kann ich das Ganze nicht mehr erklären.
Anzeige
AW: nur 1 Idee
09.06.2022 16:47:54
Berny
Hallo ihr beiden,
ich habe oben ja schon einmal geschrieben, dass ich das gleiche Problem kenne. Auch ich habe unterschiedliche Bildschirme. (Notebook / Externer Bildschirm)
ich füge Bilder in eine bestimmte Zeile ein. Ich gehe dabei nicht auf "Application.Top" sondern...

.ShapeRange.Left = Columns("B").Left
.ShapeRange.Top = Rows(ActiveCell.Row).Top
.ShapeRange.IncrementTop 1
.ShapeRange.IncrementLeft 1
Dennoch sind die Bilder, wenn ich beim Einfügen den "falschen" Bildschirm verwende Meilenweit weg.
Es ist unglaublich, man muss nur das aktive Fenster auf den richtigen Bildschirm ziehen (der richtige ist der, der in Windows-Einstellungen der Hauptbildschirm ist), schon passt alles. Wenn ich die Einstellungen ändere, muss ich das Fenster vorher auf den anderen Bildschirm ziehen!
Wenn die Aussage von Oberschlumpf stimmt, müsste man den Fehler berechnen können und als Incremnet korrigieren. NUR!- Dann müsste das Programm vorher feststellen, auf welchem Bildschirm sich das Fenster gerade befindet, welche Auflösung der Hauptbildschirm und welche Auflösung der Nebenbildschirm hat.
VG Berny
Anzeige
AW: nur 1 Idee
09.06.2022 17:09:19
Oberschlumpf
Hi,
ähh? haste dich bestimmt verlesen - niemand nutzt "Application.Top"
und auch du nutzt genau so .ShapeRange.Top = Rows(ActiveCell.Row).Top
is also kein Unterschied ;-)
Aber ich glaube, du bist mit deinen Überlegungen "...müsste man den "Fehler" berechnen können und als..." (es ist ja gar kein Fehler! ;-) ) nicht so falsch.
Ich hab allerdings nich so Lust, so lange zu (be)rechnen, bis es passt.
Hach...is nich mal ne Ausrede! :-) Ich hab gar nich n 2. Monitor - mein 1x 27" reicht mir :-)
Ciao
Thorsten
AW: nur 1 Idee
09.06.2022 18:20:19
faultpax
Ja danke, ich glaube es zu verstehen.
Nur ist es mir im Grunde egal, wo der "Nullpunkt" des Koordinatensystems ist.
Ich lese die Position des aktiven Zelle aus und plaziere ebendort meinen NewButton!
Übrigens: Die Zeilenhöhe der Zellen der Tabelle (oberhalb der ActiveCell) scheint KEINEN Einfluß auf die Größe des unerwarteten Versatzes zu haben, - nur die Zeilenanzahl!
Anzeige
AW: nur 1 Idee
09.06.2022 18:30:06
faultpax
...und witzigerweise ist das Problem jetzt nach einem Reboot verschwunden.
Dieses Phänomen hatte ich schon einmal, als ich einem Beamer verwendete.
Damals meinte ich noch, daß es an der Ansichtsvergrößerung läge.
Bin gespannt, ob ich irgendwie feststellen kann, wie ich den Fehler verläßlich reproduzieren könnte.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige