Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen

Mauszeiger auf CommandButton

Betrifft: Mauszeiger auf CommandButton von: Thomas
Geschrieben am: 18.05.2008 13:59:01

Hallo,

über eine ComboBox wähle ich die jeweilige Nummer eines CommandButton.
Jetzt sollte der Mauszeiger auf die Mitte dieses Button gesetzt werden.
Dieser weigert sich aber beharrlich.

https://www.herber.de/bbs/user/52430.xls

Kann mir bitte jemad sagen, was ich da falsch mache und vor Allem wie es richtig geht?

Gruß
Thomas

  

Betrifft: AW: Mauszeiger auf CommandButton von: Gerd
Geschrieben am: 18.05.2008 14:59:47

Hi,

die Cursorposition bezieht sich auf den Bildschirm, nicht auf die userform.

mfg Gerd


  

Betrifft: AW: Mauszeiger auf CommandButton von: Thomas
Geschrieben am: 18.05.2008 15:08:07

Hallo Gerd,

war es denn nicht richtig zunächst die Position der UserForm durch Me.Left und Me.Top auf dem Bildschirm zu ermitteln?

Dann dachte ich einen "Index" 0,0 zu haben, zu welchem ich nur noch die Abstände innerhalb der UserForm hinzuzählen müßte.

Gruß
Thomas


  

Betrifft: AW: Mauszeiger auf CommandButton von: Reinhard
Geschrieben am: 18.05.2008 15:19:04

Hi Thomas,

direkt helfen kann ich nicht weil ich auch nicht weiß warum dein Ansatz scheitert.
Auf meinem Bildschirm, kann ja auf einem anderen Bildschirm anders sein, klappt dies:

Private Sub MausZeiger_setzen(ByRef Nr As Integer)
    Dim frmLeft As Double
    Dim frmTop As Double
    Dim cmdHeight As Double
    Dim cmdLeft As Double
    Dim cmdTop As Double
    Dim cmdWidth As Double
    Dim x As Long
    Dim y As Long
    Dim M As Long
    
    frmLeft = Me.Left
    frmTop = Me.Top
    cmdHeight = Controls("CommandButton" & Nr).Height
    cmdLeft = Controls("CommandButton" & Nr).Left
    cmdTop = Controls("CommandButton" & Nr).Top
    cmdWidth = Controls("CommandButton" & Nr).Width
    
    x = frmLeft + cmdLeft + (cmdWidth / 2) + 180
    y = frmTop + cmdTop + (cmdHeight / 2) + 150
    SetCursorPos 720, 180 + Nr * 50
End Sub


Gruß
Reinhard


  

Betrifft: AW: Mauszeiger auf CommandButton von: Thomas
Geschrieben am: 18.05.2008 15:28:43

Hallo Reinhard,

da komme ich nun gar nicht mit. Wenn Du hinter SetCursorPos feste Werte eingibst, brauchst Du zuvor eigentlich gar nichts berechnen.
Was machst Du, wenn Du die lfd,-Nr. * 50 nimmst?

Gruß
Thomas


  

Betrifft: Me.Left und Me.Top liefern falsche Werte ! von: NoNet
Geschrieben am: 18.05.2008 15:13:58

Hallo Thomas,

m.E. machst Du nichts falsch. Habe es gerade mal auf meinem Notebook mit Excel2003 SP2 getestet : Funktioniert ebenfalls nicht. Ich habe in das UserForm noch ein Label platziert, das die aktuelle Position des UF anzeigt : Wenn das UF ganz links oben in die Ecke des Bildschirms verschoben wird, dann ist das die Koordinate 0 / 0, das ist OK. Verschiebe ich die linke obere Ecke des UF in die Mitte des Bildschirms, dann ist das nicht 512 /384 (also die Mitte meines 1024x768 Bildschirms), sondern ca. 380 / 285. Verschiebe ich das UF ganz nach rechts unten (inke obere Ecke des UF), dann erscheint die Koordinate ca. 750 / 560.

D.h. : Der errechnete Koordinatenwert des UF beträgt nur ca. 70%-75% des tatsächlichen Wertes !

Daher verschiebt sich der Mauszeiger imit Deinem Code auch nicht korrekt auf den Button, sondern etwas zu weit nach links oben - obwohl Deine Arithmetik mathematisch richtig ist !

Leider funktioniert der gedachte Workaround nicht, frmLeft und frmTop einfach durch 73% zu teilen :-(
Eine Lösung kann ich Dir daher momentan noch nicht anbieten.....

Dein Crosspost im MOF wurde übrigens geschlossen :
http://www.ms-office-forum.net/forum/showthread.php?t=231989

Gruß, NoNet


  

Betrifft: AW: Me.Left und Me.Top liefern falsche Werte ! von: Thomas
Geschrieben am: 18.05.2008 15:50:26

Hallo NoNet,

vielen Dank. Das mit den Labels, welche die Koordinaten der UserForm auf dem Bildschirm angeben, habe ich auch schon probiert.
Genau dehalb dachte ich, daß wenn ich zunächst die Position der UserForm ermittle, ich mich nur noch innerhalb dieser, relativ zum Bildschirmrand bewegen müßte.

Kann es denn sein, daß die Position der Maus auf dem Bildschirm und die der Controls innerhalb einer UserForm mit zweierlei Einheiten berechnet werden? Und wenn ja, weiß da jemand Rat wie man auf einen Nenner kommt?

Das mit MFO habe ich schon in völliger Zwerknirschung zur Kenntnis genommen und gelobe Besserung. Bitte gib nicht noch nachträglich Salz in die Wunde.
Ob ich trotzdem noch auf Hilfe hoffen darf?

Gruß Thomas


  

Betrifft: AW: Me.Left und Me.Top liefern falsche Werte ! von: Caruso
Geschrieben am: 18.05.2008 16:20:02

Hallo Thomas,

deine SetCursorPos-Fkt. verwendet Pixel, mit Height/Top/Left etc. erhälst du aber Twips. Hierzu gibt es im Archiv und bei Google unzählihe Beiträge.

Du musst Twips in Pixel umrechnen.

Bei mir (1280er Auflösung) komme ich näherungsweise mit folgender Formel hin

    x = (frmLeft + cmdLeft + (cmdWidth / 2)) * 1.33
    y = (frmTop + cmdTop + (cmdHeight / 2) + 24) * 1.33



Die "24" in der letzten Formel betrifft meine Schätzung der Höhe der Titelzeile der Userform.

LG

Carlo


  

Betrifft: AW: Me.Left und Me.Top liefern falsche Werte ! von: Gerd
Geschrieben am: 18.05.2008 16:32:34

Hi,

"...erhälst du aber Twips..."

Das ist in VB so, in VBA(Forms 2.0) sind es Point.

mfg Gerd


  

Betrifft: AW: Me.Left und Me.Top liefern falsche Werte ! von: Caruso
Geschrieben am: 18.05.2008 16:41:34

Hallo Gerd,

Korrekt, du hast recht.

Ändert aber nichts an seiner Problematik und Vorgehensweise - einen Umrechnungsfaktor für seine aktuelle Darstellung ermitteln und bei der Y-Angabe die Höhe der Titzelzeile berücksichtigen.

Oder gibt es dort neuerdings eine fixe Umrechnungsmöglichkeit?

LG

Carlo


  

Betrifft: AW: Me.Left und Me.Top liefern falsche Werte ! von: Thomas
Geschrieben am: 18.05.2008 17:18:55

Hallo Carlo,
Hallo Gerd,

solange die Experten das Problem unter sich besprechen, halte ich mich lieber in der Deckung.
Auf jeden Fall möchte ich mich bei euch Beiden bedanken.

Gibt es denn eine Funktion, wie ich generell von Maus auf UserForm und wieder zurück komme?
Gibt es eine Möglichkeit wie ich die Höhe der Titelzeile berechnen kann?

Nochmals Danke.
Gruß Thomas


  

Betrifft: AW: Me.Left und Me.Top liefern falsche Werte ! von: Caruso
Geschrieben am: 18.05.2008 17:36:35

Hallo Thomas,

wie gesagt, den Multiplikator kannst du noch genauer tunen als 1.33

für die Titelzeile

Breite des Rahmens (links, unten, rechts ) = (me.width - me.insidewidth)/2

Titelzeile = me.height-me.insideheight-(Breite des Rahmens links/unten/rechts)

LG

Carlo


  

Betrifft: AW: Me.Left und Me.Top liefern falsche Werte ! von: Gerd
Geschrieben am: 18.05.2008 17:50:44

Hi,

unter der Voraussetzung, das der Standardwert von 96 dpi eingestellt ist, ist der Umrechnungsfaktor
1,33333333333333, bei 144 dpi dann 2, das kann man aber alles mittels API auslesen.

mfg Gerd


  

Betrifft: AW: Me.Left und Me.Top liefern falsche Werte ! von: Thomas
Geschrieben am: 18.05.2008 18:40:48

Hallo Carlo,
Hallo Gerd,

nochmals vielen Dank für Eure Hilfe. Mit diesen Angaben komme ich weiter.

Gruß
Thomas


 

Beiträge aus den Excel-Beispielen zum Thema "Mauszeiger auf CommandButton"