Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1572to1576
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

UserForm-Problem mit .Width/.Height /.Top/.Left

UserForm-Problem mit .Width/.Height /.Top/.Left
15.08.2017 16:00:59
Martin
Hallo,
ich beabsichtige ein UserForm als Vollbild darzustellen und wollte die Positionierung der Steuerelemente dynamisch berechnen. Jedoch verstehe ich die "Maßeinheit" von .Top und .Width nicht, ich dachte immer die Maßeinheit wäre Pixel und mit folgendem Code könnte ich einen Button an der unteren rechten Ecke des UserForm platzieren:
Sub cmdPosition()
With CommandButton1
.Top = UserForm1.Height - .Height
.Left = UserForm1.Width - .Width
End With
End Sub
Jedoch befindet sich der CommandButton dann weit außerhalb des Bildschirmbereichs. Zur Veranschaulichung habe ich eine Beispieldatei hochgeladen, in welcher per SpinButton die Top- und Left-Koordinaten eines Buttons verändert werden können:
https://www.herber.de/bbs/user/115486.xls
Nur leider verstehe ich die Positionsdaten trotzdem nicht :-(
Wie kann ich zum Beispiel den Button dynamisch an die untere rechte Ecke setzen?
Viele Grüße
Martin

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UserForm-Problem mit .Width/.Height /.Top/.Left
15.08.2017 16:36:38
mmat
Hi,
also "weit außerhalb des Bildschirmbereichs" ist bei mir was anderes.
Ich hab den Eindruck, das UserForm1.Height / .width eben auch den Rand (bei .height ggf. die Titelzeile) mitrechnet. Ränder sind aber nicht geeignet um einen Knopf unterzubringen, daher wirst du wohl irgendwie eine Konstante Größe für den Rand abziehen müssen.
vg, MM
AW: UserForm-Problem mit .Width/.Height /.Top/.Left
15.08.2017 16:49:12
Martin
Hallo mmat,
also ich habe eine Bildschirmauflösung von 1680x1050 Pixeln. Auf meinem Bildschirm ist der Button bei Left = 1260 komplett verschwunden, also 400 Pixel(?) "zu zeitig". Das ist für mich schon weit außerhalb. Vertikal ist der Button bei 790 bereits weg, also über 250 Pixel(?) zu zeitig.
Es geht mir darum die Steuerelemnte in Abhängigkeit der Bildschirmauflösung zu platzieren, da scheint mir eine konstante Größe eher unangebracht. Zudem müssen die Zahlen doch enen logischen Sinn haben.
Viele Grüße
Martin
Anzeige
AW: UserForm-Problem mit .Width/.Height /.Top/.Left
15.08.2017 17:02:17
mmat
Ähm,
Ich hab einfach deinen Code genommen. Wenn ich davon ausgehen kann, das die Metrik des Buttons und der Maske die gleiche Maßeinheit verwenden, muß ich eigentlich garnix wissen.
Der folgende Code setzt den Knopf recht genau unten in die Ecke. Das war doch die Aufgabe ?
Private Sub CommandButton1_Click()
With CommandButton1
.Top = UserForm1.Height - .Height - 22
.Left = UserForm1.Width - .Width - 6
End With
End Sub
vg, MM
AW: UserForm-Problem mit .Width/.Height /.Top/.Left
15.08.2017 17:16:35
Martin
Hallo mmat,
ich wollte den Button eigentlich nur an der unteren rechten Ecke haben, um das Prinzip zu verstehen. Ich beabsichtige weitere Steuerelemnte auf dem UserForm einzubinden und will deren Größe bzw. Position variabel je nach Bildschirmauflösung anpassen. Sepps Lösungsweg gefällt mir sehr gut. Ich verstehe nur noch nicht ganz was er mit "Bildschirmauflösung im Verhältnis zur Bildschirmgröße" meint. Aber vielen Dank für deine Bemühungen.
Viele Grüße
Martin
Anzeige
AW: UserForm-Problem mit .Width/.Height /.Top/.Left
16.08.2017 13:11:07
mmat
Frage: Mein Code funktioniert bei dir nicht ?
vg, MM
AW: UserForm-Problem mit .Width/.Height /.Top/.Left
15.08.2017 16:47:53
Sepp
Hallo Martin,
du hast statt .Top .Height bzw. statt .Left .Width genommen, außerdem musst du den Rand des UF noch berücksichtigen und vor Allem die Bildschirmauflösung im Verhältnis zur Bildschirmgröße.
Ich habe jetzt 0,75 genommen, das solltest du aber ebenfalls berechnen.
Private Sub UserForm_Initialize()

Dim gWidth As Integer, gHeight As Integer

gWidth = GetSystemMetrics(SM_CXSCREEN) 'Bildschirmbreite
gHeight = GetSystemMetrics(SM_CYSCREEN) 'Bildschirmhöhe



Call RemoveCaption(Me)

With Me
  .Width = gWidth * 0.75
  .Height = gHeight * 0.75
End With
With CommandButton1
  .Top = Me.Top + 0.75
  .Left = Me.Left + 3.75
End With
With CommandButton2
  .Top = Me.Top + Me.Height - .Height - 3.75
  .Left = Me.Left + Me.Width - .Width - 0.75
End With

Label1 = "CommandButton1.Top = " & CommandButton1.Top
Label2 = "CommandButton1.Left = " & CommandButton1.Left
End Sub

Zweiten CommandButton einfügen!
Gruß Sepp

Anzeige
AW: UserForm-Problem mit .Width/.Height /.Top/.Left
15.08.2017 17:04:55
Martin
Hallo Sepp,
vielen Dank, dein Code funktioniert super! Aber leider verstehe ich noch nicht alles. Deshalb würde ich dir gerne noch einige Fragen stellen:
Mein Code war:
       With CommandButton1
.Top = UserForm1.Height - .Height
.Left = UserForm1.Width - .Width
End With
Das bedeutet doch, dass sich die Oberkante des Buttons an der Höhe des UserForm abzüglich der eigenen Button-Höhe positioniert wird. Genauso umgedreht bei der horizontalen Ausrichtung des Buttons vom linken Bildschirmrand. Inwiefern habe ich .Top .Height und statt .Left .Width vertauscht?
Zweite Frage: Deine Multiplikation mit 0,75 scheint alles hervorragend zu "richten". Aber ich verstehe den Grund dafür nicht. Was sind das für .Width/.Height/.Top/.Left-Zahlenangaben? Was sagen die aus?
Für eine nähere Erläuterung wäre ich dir ebenfalls sehr dankbar.
Das der Rand des UF auch eine kleine Rolle spielt, war mir auch bewusst.
Viele Grüße
Martin
Anzeige
AW: UserForm-Problem mit .Width/.Height /.Top/.Left
15.08.2017 17:26:30
Sepp
Hallo Mrtin,
du willst den Button an der Oberkante des UF ausrichten, also Button.Top = UF.Top - Rand
UF.Height gibt die Höhe des UF an und hat mit .Top nichts zu tun. Das Selbe mit .Left und .Width
Für Unten und Rechts brauchst du .Height bzw. .Width.
* 0,75 hab ich durch probieren rausgefunden, Du errechnest die Bildschirmauflösung in Points, das UF braucht aber die Angaben in Pixel Point und Pixel sind zwei Paar Schuhe. Wie man das berechnet, findest du im Netz.
0,75 habe ich für den linken und rechten Rand genommen, 3,75 für Oben und Unten.
Gruß Sepp

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige