Ich habe Angst, dass ich Ihnen mehr bin verwirrend als zu helfen. Sie müssen verstehen, dass "Application.Width" die gesamte Breite des Excel-Fensters ist. Ich denke, dieser Code hilft Ihnen, die Zahlen zu verstehen. Legen Sie es in ein reguläres Modul, nicht das Formularmodul, nicht das Blattmodul. Wenn Sie es ausführen, wird es debuggen.print die Zahlen der Auflösung Ihres Computers, Gesamtbreite von Excel, wenn Sie bei Ihrer Auflösung zu maximieren, die Gesamtbreite von Excel, wenn bei Ihrer Auflösung minimiert, und die Gesamtbreite Ihres Benutzerformulars. (Ändern Sie es von UserForm1, wenn Sie einen anderen Namen dafür haben.)
Jeder Computer, der Ihr Formular ausführt, möglicherweise unterschiedliche Auflösungen, und ihre Bildschirme möglicherweise maximiert oder minimiert werden, kennen wir diese Dinge nicht. Aber es sind alle Variablen, die sich auf die gesamte verfügbare Breite auswirken, wo das Formular positioniert werden soll. Denk an einzelne Pixel. Wenn Ihr Formular 300 Pixel breit ist und Sie es auf einem Bildschirm positionieren, der über 1000 Pixel verfügt, dann wäre der Befehl, um das Formular am rechten Rand des Bildschirms zu setzen, me.left = 1000 - 300. (oder Anwendung .width - me.width) Aber wenn nur 700 verfügbare Pixel zur Verfügung stehen, dann wäre der Befehl me.left = 700-300 oder 400.
Der Befehl me.left sagt dem Computer, dass er zeichnen soll linkes Pixel des Formulars an einer bestimmten Stelle. Wenn Ihr also auf der linken Seite erscheint (auf der gleichen Seite wie der "Start" - oder Windows-Button), dann sagen Sie ihm, dass er das Pixel ganz links auf 0 zeichnen soll. Ich weiß nicht, wie ich es besser erklären könnte.
Aber legen Sie dies in ein Modul und führen Sie es aus. Es kann hilfreich sein, die tatsächlichen Zahlen in Ihren Befehlen zu sehen.
Public Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long
Const SM_CXSCREEN = 0
Const SM_CYSCREEN = 1
Sub VerifyScreenResolution2()
Dim x As Long
Dim y As Long
x = GetSystemMetrics(SM_CXSCREEN)
y = GetSystemMetrics(SM_CYSCREEN)
Debug.Print "This Computer Resolution Width: " & x, "Resolution Height: "; y
ActiveWindow.WindowState = xlMaximized
Debug.Print "Application.Width Maximized: " & Application.Width
ActiveWindow.WindowState = xlMinimized
Debug.Print "Application.Width Minimized: " & Application.Width
Debug.Print "Userform1 Width: " & UserForm1.Width
End Sub
Hier sind die Ausdrucke, die ich für meinen Computer und Formular bekomme.
Dieser Computer Auflösung Breite: 1366
Auflösung Höhe: 768
Application.Width Maximized: 1.036,5
Application.Width Minimized: 120
UserForm1 Breite: 240
Ich bin kein Experte hier aber [von den Blicken] (https://www.mrexcel.com/forum/excel-questions/671108-userform-startup-position.html) sollten Sie Ihren Code arbeiten . Können Sie überprüfen, ob dieser Code tatsächlich ausgeführt wird? – displayname
Nun, Sie können einen Haltepunkt für den [Debugger] setzen (https://www.youtube.com/watch?v=T1ARYg4ZJBA). Ein anderer Weg könnte sein, eine Nachricht zu schreiben oder ein Nachrichtenfeld zu öffnen. – displayname
Sie sollten lernen, was ein Debugger ist. Es ist das wichtigste Werkzeug für Sie als Programmierer. Vielleicht schaue [dieses Video] (https://www.youtube.com/watch?v=T1ARYg4ZJBA) oder google "was ist ein Debugger". Ihr Code ist vielleicht in Ordnung, aber Sie müssen herausfinden, ob er ausgeführt wird. Wenn Sie nicht daran interessiert sind zu lernen, was ein Debugger ist eine faule Methode wäre, 'MsgBox" Hello World! "Irgendwo in Ihrem Code einfügen und sehen, ob dieses Meldungsfeld angezeigt wird oder nicht. – displayname