2016-10-20 2 views
0

Ich möchte die Position einer Reihe von Formularen in der Mitte der Anwendung beibehalten, Formulare werden unterschiedliche Größen so unten FormTop/FormLeft Snippet kann nicht immer wieder mit ausgeführt werden der gleiche Effekt. Um dies zu tun, setze ich eine öffentliche Variable mit den .top und .left Werten des Formulars.Behalten Sie die Position von Benutzerformularen VBA

Ich erhalte eine Fehlermeldung "Objekt unterstützt diese Eigenschaft oder Methode nicht", was seltsam erscheint, da ich den Eindruck hatte, dass die Gleichung für FormLeft zu einem doppelten Datentyp ausgewertet würde. Beide Zeilen funktionieren im zweiten Codeabschnitt gut, was mache ich falsch?

Public FormTop As Double 
Public FormLeft As Double 

sub main() 
    CentreForm UserForm2 
end sub 

Sub CentreForm(UForm As UserForm) 
    With UForm 
     If FormTop = 0 And FormLeft = 0 Then 
'*********Errors appear on the below two lines****************** 
      FormLeft = Application.Left + (0.5 * Application.Width) - (0.5 * .Width) 
      FormTop = Application.Top + (0.5 * Application.Height) - (0.5 * .Height) 
      Debug.Print FormLeft, FormTop 
     End If 
     .StartUpPosition = 0 
     .Left = FormLeft 
     .Top = FormTop 
    End With 
End Sub 

sub IWork() 
With UserForm2 
    .Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width) 
    .Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height) 
end with 
end sub 
+0

die Leitungsfehler erzeugt ?? –

+0

Hoppla, die Zeilen, wo FormLeft und FormTop beide den Fehler erzeugen, werde ich jetzt aktualisieren ... – User632716

+0

Wie nennt man 'Centreform-Prozedur' ?? –

Antwort

1

Wenn Sie Ihr Problem basierend auf Kommentar Vorschlag nicht lösen Sie bitte diese Zeile:

Sub CentreForm(UForm As UserForm) 

in

Sub CentreForm(UForm As Object) 
+0

Arbeitete ein Vergnügen, danke – User632716

Verwandte Themen