Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
864to868
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
864to868
864to868
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Buttons auf Userform beim Laden verschieben?!?

Buttons auf Userform beim Laden verschieben?!?
26.04.2007 15:52:00
Till
Hallo Leute,
ich versuche gerade meine Userform, die ich unter Office 2003 erstellt habe rückwirkend auf Office 2000 lauffähig zu machen, da sie auf verschiedenen Rechnern mit (leider) älterer Konfiguration laufen soll.
In der Office 2003 Version funktionierte noch folgendes:

Private Sub UserForm_activate()
On Error Resume Next
'Positionierung der Userform
Me.Left = 0
Me.Top = 0
Me.Height = GetSystemMetrics(SM_CYSCREEN) * 0.75
Me.Width = GetSystemMetrics(SM_CXSCREEN) * 0.75
'Positionierung der Buttons
Dim iTop As Integer, iLeft As Integer
iTop = Application.Height - 50
iLeft = Application.Width - 50
'Stop Button
CommandButton5.Top = iTop + 10
CommandButton5.Left = iLeft
End Sub


Leider klappt das nicht mehr in der Office 2000 Version. Hier schlagen diese Befehle fehl. Der Stop Button (CommandButton5) wird nicht mehr an die richtige Position geschoben! Wie kann man das trotzdem lösen? Welchen alternativen Befehl gibt es da?
Danke schon mal für ein paar hilfreiche Tipps!
Gruß Till

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Buttons auf Userform beim Laden verschieben?!?
26.04.2007 23:28:42
Luschi
Hallo Till,
die Funktion "GetSystemMetrics" gibt es auch in Excel2003 nicht. Irgendwo im Code wirst Du folgende Zeilen finden finden:
Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1
Damit wird in Vba eine s.g. API-Funktion definiert, die von Windows bereitgestellt.
Diese Zeilen gehören in den Definitionsblock eines Moduls.
Gruß von Luschi
aus klein-Paris

AW: Buttons auf Userform beim Laden verschieben?!?
26.04.2007 23:43:07
Till
Hallo, Luschi,
das ist ziemlich richtig....
Diese Funktion habe ich auch brav in einem externen Modul definiert:

Option Explicit
Declare Function GetSystemMetrics Lib "User32" (ByVal nIndex As Long) As Long
Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1


Die allgemeine Höhe und Breite, sowie Position der Userform ist auch ehrlich gesagt NICHT das Problem.
Vielmehr scheitert der Code bei Office 2000 daran den Button (CommandButton5) richtig zu platzieren.
Ich vermute mal, dass es Application.Height bzw. Application.Width noch nicht in Office 2000 gab.
Weiß da einer mehr. Ich kann es leider -mangels Masse - nur mutmaßen.
Danke für weitere Tipps.
Gruß Till

Anzeige
AW: Buttons auf Userform beim Laden verschieben?!?
27.04.2007 00:01:00
Luschi
Hallo Till,
in Excel 2000 gibt es die folgenden Eichenschaften:
Application.Height
Application.Width
Gruß von Luschi
aus klein-Paris

AW: Buttons auf Userform beim Laden verschieben?!?
27.04.2007 01:05:00
Erich
Hallo Till,
wenn es die beiden Application-Eigenschaften in Excel 2000 nicht gäbe,
würde der Code dort gar nicht laufen, sondern einen Kompilierungsfehler ergeben.
Der Code positioniert aber nur anders als gewünscht.
Ich habe mal die vorkommenden Werte ausgeben lassen (aus deinem Code in den Spalten 2 und 3,
aus meinem Code-Vorschlag - unter Excel XP - in den Spalten 5 und 6).
Aus den Werten in den Spalten 2 und 3 lässt sich ersehen,
dass der Button zu weit rechts unten positioniert wird.
Du kannst ja mal die Werte mit denen in deinem Excel 2003 vergleichen:
Tabelle1

 ABCDEF
2 HeightWidth HeightWidth
3GetSystemMetrics(SM_CYSCREEN)7681024 7681024
4Me.Height576768 574766
5CommandButton5.Height24100 24100
6CommandButton5.Top542724 520650
7Application.Height582774 582774
8iTop532724   

Hier der Code dazu:

Private Sub xUserForm_activate()
Dim zz As Long
Dim iTop As Integer, iLeft As Integer
'    On Error Resume Next
'Positionierung der Userform
Me.Left = 0
Me.Top = 0
Me.Height = GetSystemMetrics(SM_CYSCREEN) * 0.75
Me.Width = GetSystemMetrics(SM_CXSCREEN) * 0.75
'Positionierung der Buttons
iTop = Application.Height - 50
iLeft = Application.Width - 50
'Stop Button
CommandButton5.Top = iTop + 10
CommandButton5.Left = iLeft
With Sheets(1)
zz = 2
zz = zz + 1: .Cells(zz, 1) = "GetSystemMetrics(SM_CYSCREEN)"
zz = zz + 1: .Cells(zz, 1) = "Me.Height"
zz = zz + 1: .Cells(zz, 1) = "CommandButton5.Height"
zz = zz + 1: .Cells(zz, 1) = "CommandButton5.Top"
zz = zz + 1: .Cells(zz, 1) = "Application.Height"
zz = zz + 1: .Cells(zz, 1) = "iTop"
zz = 2
zz = zz + 1: .Cells(zz, 2) = GetSystemMetrics(SM_CYSCREEN)
zz = zz + 1: .Cells(zz, 2) = Me.Height
zz = zz + 1: .Cells(zz, 2) = CommandButton5.Height
zz = zz + 1: .Cells(zz, 2) = CommandButton5.Top
zz = zz + 1: .Cells(zz, 2) = Application.Height
zz = zz + 1: .Cells(zz, 2) = iTop
zz = 2
zz = zz + 1: .Cells(zz, 3) = GetSystemMetrics(SM_CXSCREEN)
zz = zz + 1: .Cells(zz, 3) = Me.Width
zz = zz + 1: .Cells(zz, 3) = CommandButton5.Width
zz = zz + 1: .Cells(zz, 3) = CommandButton5.Left
zz = zz + 1: .Cells(zz, 3) = Application.Width
zz = zz + 1: .Cells(zz, 3) = iLeft
End With
End Sub
Private Sub UserForm_activate()
Dim zz As Long
Dim iTop As Integer, iLeft As Integer
'    On Error Resume Next
'Positionierung der Userform
Me.Left = 1
Me.Top = 1
Me.Height = GetSystemMetrics(SM_CYSCREEN) * 0.75 - 2
Me.Width = GetSystemMetrics(SM_CXSCREEN) * 0.75 - 2
'Positionierung der Buttons
iTop = Me.Height - 100
iLeft = Me.Width - 100
'Stop Button
CommandButton5.Top = Me.Height - CommandButton5.Height - 30
CommandButton5.Left = Me.Width - CommandButton5.Width - 16
With Sheets(1)
zz = 2
zz = zz + 1: .Cells(zz, 5) = GetSystemMetrics(SM_CYSCREEN)
zz = zz + 1: .Cells(zz, 5) = Me.Height
zz = zz + 1: .Cells(zz, 5) = CommandButton5.Height
zz = zz + 1: .Cells(zz, 5) = CommandButton5.Top
zz = zz + 1: .Cells(zz, 5) = Application.Height
zz = 2
zz = zz + 1: .Cells(zz, 6) = GetSystemMetrics(SM_CXSCREEN)
zz = zz + 1: .Cells(zz, 6) = Me.Width
zz = zz + 1: .Cells(zz, 6) = CommandButton5.Width
zz = zz + 1: .Cells(zz, 6) = CommandButton5.Left
zz = zz + 1: .Cells(zz, 6) = Application.Width
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Buttons auf Userform beim Laden verschieben?!?
27.04.2007 10:12:00
Till
Hallo Erich,
ich glaube Dein Tipp über die Dimensionen der Userform zu gehen mit Me.Height bzw. mit Me.Width war schon die richtige Idee.
Muss ich noch mal auf der Office2000 Maschine austesten.
Lass so lange die Frage noch als offen.
Meld mich dann noch mal!
Danke!
Gruß Till

AW: Buttons auf Userform beim Laden verschieben?!?
27.04.2007 13:35:29
Till
Hallo Erich,
hab's getestet. Funktioniert super!
Danke!
Gruß Till

Danke für Rückmeldung - und schönes WoEnde! (oT)
27.04.2007 14:53:59
Erich

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige