Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Userform platzieren

Userform platzieren
David
Hallo zusammen,
ich rufe eine Userform mit
Private Sub CommandButton1_Click()
Navigation.Show vbModeless
End Sub
auf. Dabei wird diese immer in der Mitte des Bildschirms angezeigt, egal, welche Position sie vorher hatte.
Kann man eine Userform an einer bestimmten Stelle "erscheinen" lassen (z. Bsp. am rechten Bildschirmrand) und wenn ja, wie ist die Syntax dafür?
Danke.
Gruß
David
Anzeige
Me.Left = 100: Me.Top = 300
01.02.2012 14:54:08
NoNet
Hallo David,
kopiere folgenden Code in das Klassenmodul des UserForms :
Private Sub UserForm_Activate()
Me.Left = 100    'horizontaler Abstand vom linken Bildschirm-Rand
Me.Top = 300     'vertikaler Abstand vom oberen Bildschirm-Rand
End Sub
Gruß, NoNet
Anzeige
AW: Me.Left = 100: Me.Top = 300
01.02.2012 15:09:19
David
Hallo NoNet,
das wird leider ignoriert. Egal, welche Werte ich eintrage, die Position ist die wie in den Eigenschaften festgelegt.
Gruß
David
Hmmm - in Excel 2010 klappt das... _oT
01.02.2012 15:15:38
NoNet
_oT = "ohne Text"
AW: Userform platzieren
01.02.2012 14:54:47
David
Ok, habe jetzt in den Eigenschaften gefunden, dass man "Startup-Position" auf manuell stellen muss und dann die Left-Eigenschaft für die Position genommen wird.
Was mache ich aber, wenn die dadurch errechnete Position (wegen anderer Bildschirmauflösung) außerhalb des Bildschirmes liegt und dann die Form ggf. nicht angezeigt wird? Kann man die Auflösung abfragen und dann beim Initialisieren der Form die Position mitgeben? Wenn ja, wie?
Gruß
David
Anzeige
Bildschirmauflösung ermitteln
01.02.2012 15:00:42
NoNet
Hallo David,
das ist eine Standard-Frage, die seit Jahren regelmässig in Excel-Foren gestellt und beantwortet wird.
Die Antwort ist natürlich absolut *GEHEIM* - aber ich habe sie "geknackt" - hier der Code zum Knacken :

Gruß, NoNet
Anzeige
MIST - Code war ZU *GEHEIM* ;-)
01.02.2012 15:03:33
NoNet
Hallo David,
Mein Code war wohl ZU *GEHEIM* - ich hatte den Präfix http:// vergessen - hier der passende "Code" :
;-))
Gruß, NoNet
Anzeige
AW: Bildschirmauflösung ermitteln
01.02.2012 15:04:29
David
Super! Danke! Schnelle Hilfe!
"Die von Ihnen aufgerufene Seite wurde leider nicht gefunden. Versuchen Sie bitte, über die linke Navigationsleiste zu der gesuchten Seite zu kommen. "
Das man die Position ermitteln kann, weiß ich und würde ich sicher auch im Archiv finden, aber wie ich das variabel der Form zuweisen kann, habe ich nicht gefunden!
Nun tu mal bitte nicht so, als ob ich der Erste bin, der Fragen stellt, die schon im Archiv zu finden sind!
Trotzdem Danke!
Gruß
David
Anzeige
Nee, nicht der ERSTE, aber der zig-Hunderste ;-)
01.02.2012 15:14:11
NoNet
Hallo David,
ist ja nicht böse gemeint, aber : Du bist garantiert NICHT der ERSTE, der diese Frage gestellt hat - sondern ganz im Gegenteil : diese Frage hatten sicherlich schon einige (untertrieben !) HUNDERTE Excel-Anwender, daher besteht eine grosse Chance, dass diese Frage schon zigmal beantwortet wurde.
Bevor ein Helfer also "mühsam" eine Antwort erstellt, hast Du (oder Ich oder ein anderer PC-User, der eine Suchmaschine "füttern" kann), die passende Antwort per GOOGLE (oder einer anderen Suchmaschine Deines Vertrauens) selbst sehr schnell gefunden.
Ergo : Ist kein Vorwurf, sondern nur eine kleine "Erinnerung", wie man diese Standardfrage selbst beantworten könnte ;-)
Salut, viel Erfolg, NoNet
PS : Ich würde den Code in diesem Beitrag bevorzugen :
http://www.office-loesung.de/ftopic125045_0_0_asc.php
Anzeige
AW: Nee, nicht der ERSTE, aber der zig-Hunderste ;-)
01.02.2012 15:20:01
David
Schon Ok, du hast ja Recht!!! Ich versuche, mich zu bessern.
Leider scheitert der Code Private Declare

Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long mit der Meldung:
"Nach End Sub
, End

Function oder End Property können nur Kommentare stehen"
Muss da wieder irgendeine Library oder Addin etc. eingebunden werden oder was könnte das Problem sein?
Gruß
DAvid
Anzeige
AW: Nee, nicht der ERSTE, aber der zig-Hunderste ;-)
01.02.2012 15:22:05
David
Ups, hier nochmal "ordentlich" formatiert:
Leider scheitert der Code
Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long

mit der Meldung:
"Nach End Sub, End Function oder End Property können nur Kommentare stehen"

Muss da wieder irgendeine Library oder Addin etc. eingebunden werden oder was könnte das Problem sein?
Gruß
DAvid
Anzeige
AW: Nee, nicht der ERSTE, aber der zig-Hunderste ;-)
01.02.2012 15:25:21
Rudi
Hallo,
Private Declare .... muss ganz oben im Modul stehen vor der ersten Sub/Function.
Gruß
Rudi
AW: Nee, nicht der ERSTE, aber der zig-Hunderste ;-)
01.02.2012 15:27:39
David
Ok, das klappt.
Woher soll man denn SOWAS wissen?! ;-(
Danke und Gruß
David
Das ist wirklich NICHT leicht erkennbar
01.02.2012 15:39:22
NoNet
Hallo David
Woher soll man denn SOWAS wissen?! ;-(

Da gebe ich Dir Recht ! - Das ist wirklich nicht intuitiv erlernbar und auch ansonsten nicht einfach zu erkennen.
Das kann man eigentlich nur aus Büchern, Erfahrung und/oder vielen Foren-Beiträgen nachlesen bzw. ableiten. Wenn man allerdings (wie Du jetzt) einmal in diese Falle getappt ist, erhöht sich die Chance, dass man sich das merkt enorm. Insofern kann man das als "Lerneffekt" verbuchen ;-)
In der VBA-Onlinehilfe (zumindest zu Excel 2010) findet man diesen Hinweis auch (sehr versteckt) :
Hilfe zu DECLARE aufrufen, dort steht gleich zu Beginn :
Deklariert auf Modulebene Verweise auf externe Prozeduren in einer Dynamic Link Library (DLL) or code resource (Macintosh).
Hier dann auf den Link "Modulebene" anklicken, dort erscheint (siehe letzten Satz zu "Deklarationen") :
Modulebene
Beschreibt den Code in dem Deklarationsabschnitt eines Moduls.
Jeder Code außerhalb einer Prozedur verweist auf Modulebenen-Code.
Deklarationen müssen zuerst aufgelistet werden, danach folgen die Prozeduren.
Solch unmöglich versteckte "Hilfe"-Konstrukte findet man in der VBA-Hilfe leider ständig - hier ist eine grosse Frustrationstoleranz notwendig, um dadurch zu lernen..... :-(
Gruß, NoNet
Anzeige
AW: Das ist wirklich NICHT leicht erkennbar
01.02.2012 15:46:02
David
Das "...jetzt) einmal in diese Falle getappt ist, erhöht sich die Chance, dass man sich das merkt enorm. Insofern kann man das als "Lerneffekt" verbuchen ;-)..." stimmt natürlich.
Ich habe aber gerade noch ein weiteres "Problem" festgestellt:
Meine Form hat eine Breite (width) von 100. Mein Bildschirm eine Auflösung von 1680x1050. somit würde ich erwarten, das bei Left = 1580 die Form am rechten Rand erscheint. Tatsächlich muss ich aber ca. 1180 einstellen, dann ist der rechte Rand der Form am rechten Bildschirmrand.
Wird hier mit verschiedenen Rastern gearbeitet?
Gruß
David
Anzeige
Ja, leider : Pixel und Points
01.02.2012 15:55:52
NoNet
Hallo David,
Wird hier mit verschiedenen Rastern gearbeitet?

Ja, leider "rechnet" Excel mit verschiedenen Einheiten (mind. mit Pixeln und Points - evtl. auch mit Pitches).
Das hängt mit der Bildschirmauflösung und der Bildpunktbreite zusammen - genau erklären kann ich es auch nicht :-(
Siehe mal hier (und natürlich bei GOOGLE ;-) :
http://office.microsoft.com/en-us/excel-help/measurement-units-and-rulers-in-excel-HP001151724.aspx
http://www.mrexcel.com/forum/showthread.php?t=134163
Gruß, NoNet
Anzeige
AW: Ja, leider : Pixel und Points
01.02.2012 16:01:15
David
Ok, hatte schon sowas geahnt. Der Link hat aber geholfen. Screen-Breite / 192 * 144 - dann hat man den "richtigen" Wert.
Nochmals vielen Dank!!!
Gruß
David
ohne ScreenResolution
01.02.2012 16:07:39
Rudi
Hallo,
vielleicht reicht dir ja auch
Private Sub UserForm_Activate()
Left = Application.Left + Application.Width - Width
End Sub

Gruß
Rudi
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Userform effektiv positionieren in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Userform erstellen: Öffne den VBA-Editor (ALT + F11) und füge eine neue Userform hinzu.

  2. Eigenschaften anpassen: Setze die Eigenschaft "StartupPosition" der Userform auf "Manuell".

  3. Position setzen: Füge folgenden Code in das Klassenmodul der Userform ein:

    Private Sub UserForm_Activate()
       Me.Left = 100    'horizontaler Abstand vom linken Bildschirm-Rand
       Me.Top = 300     'vertikaler Abstand vom oberen Bildschirm-Rand
    End Sub
  4. Bildschirmauflösung ermitteln: Um sicherzustellen, dass die Userform nicht außerhalb des Bildschirms erscheint, kannst du die Bildschirmauflösung abfragen und die Position dynamisch anpassen. Beispiel:

    Private Sub UserForm_Activate()
       Dim screenWidth As Long
       screenWidth = Application.Width
       Me.Left = screenWidth - Me.Width - 20 ' 20 Pixel Abstand vom rechten Rand
       Me.Top = 300
    End Sub

Häufige Fehler und Lösungen

  • Userform ignoriert Position: Wenn die Position der Userform ignoriert wird, stelle sicher, dass die "StartupPosition" auf "Manuell" gesetzt ist.

  • Fehlermeldung bei Declare: Achte darauf, dass der Private Declare Befehl ganz oben im Modul steht. Beispiel:

    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
  • Userform außerhalb des Bildschirms: Berechne die Position der Userform unter Berücksichtigung der aktuellen Bildschirmauflösung, um sicherzustellen, dass sie sichtbar bleibt.


Alternative Methoden

  • Verwendung von Application.Left und Application.Width: Diese Methode kann helfen, die Userform dynamisch an die aktuelle Bildschirmauflösung anzupassen:

    Private Sub UserForm_Activate()
       Left = Application.Left + Application.Width - Width
    End Sub
  • Verwendung von API-Funktionen: Du kannst auch API-Funktionen verwenden, um die Bildschirmauflösung zu ermitteln, jedoch erfordert dies etwas mehr Erfahrung mit VBA.


Praktische Beispiele

  1. Userform am rechten Bildschirmrand:

    Private Sub UserForm_Activate()
       Me.Left = Application.Width - Me.Width
       Me.Top = 100 ' Setze die Höhe nach Bedarf
    End Sub
  2. Userform in der Mitte des Bildschirms:

    Private Sub UserForm_Activate()
       Me.Left = (Application.Width - Me.Width) / 2
       Me.Top = (Application.Height - Me.Height) / 2
    End Sub

Tipps für Profis

  • Testen in verschiedenen Auflösungen: Stelle sicher, dass deine Userform in unterschiedlichen Bildschirmauflösungen gut aussieht, indem du sie auf verschiedenen Geräten testest.
  • Verwende UserForm_QueryClose, um die Position der Userform zu speichern, bevor sie geschlossen wird, und beim nächsten Öffnen wiederherzustellen.
  • Optimierung der Userform: Halte den Code sauber und gut kommentiert, um spätere Anpassungen zu erleichtern.

FAQ: Häufige Fragen

1. Kann ich die Userform automatisch zentrieren? Ja, du kannst die Position mit einer Berechnung setzen, die die Bildschirmgröße berücksichtigt, wie im Beispiel gezeigt.

2. Was kann ich tun, wenn die Userform immer noch nicht richtig positioniert wird? Überprüfe die Eigenschaften der Userform, insbesondere die "StartupPosition", und stelle sicher, dass sie auf "Manuell" gesetzt ist.

3. Wie kann ich die Bildschirmauflösung in VBA abfragen? Du kannst die GetSystemMetrics-Funktion verwenden, um die aktuelle Bildschirmauflösung zu ermitteln. Stelle sicher, dass der Code korrekt im Modul platziert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige