Сохранить положение пользовательских форм VBA

#forms #vba #excel

#формы #vba #excel

Вопрос:

Я хотел бы сохранить положение ряда форм в центре приложения, формы будут разного размера, поэтому приведенный ниже фрагмент FormTop / FormLeft нельзя запускать снова и снова с одним и тем же эффектом. Для этого я устанавливаю общедоступную переменную с помощью формы .top и .оставленные значения.

Я получаю сообщение об ошибке «Объект не поддерживает это свойство или метод», что кажется странным, поскольку у меня создалось впечатление, что уравнение для создания FormLeft будет соответствовать типу данных double. Обе строки отлично работают во втором разделе кода, что я делаю не так?

 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
  

Комментарии:

1. какая строка выдает ошибку??

2. Упс, строки, в которых FormLeft и FormTop выдают ошибку, я сейчас обновлю…

3. как вы вызываете CentreForm procedure ??

4. вообще говоря, кажется, что вы переходите UserForm2 к CentreForm неправильным способом. проверьте это, пожалуйста…

5. @KazimierzJawor, Отлично, спасибо. Я присвоил форме объектную переменную и передал ее функции, баллы за вами, если вы хотите опубликовать ответ на этот счет?

Ответ №1:

Если вы не можете решить свою проблему на основе предложения комментария, пожалуйста, измените эту строку:

 Sub CentreForm(UForm As UserForm)
  

в

 Sub CentreForm(UForm As Object)