#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)