Как передать правильно форму в процедуру?

timursmeta

Приветствую Вас знатоки!Помогите решить на первый взгляд элементарную проблему. Приведенный код ниже выдает ошибку при выполнении. "свойство или метод Height не поддерживается". Не пойму как такое возможно? Помогите пожалуйста.
Sub DoStart(byVal DocType as Integer)
 if DocType = <b>1</b> then
 CustomizeForm UserForm1
 else
 CustomizeForm UserForm2
 endif
End Sub

Sub CustomizeForm(aUsForm As UserForm)
Dim aDeltaForm As Integer 

 aDeltaForm = GetSystemMetrics(SM_CYCAPTION) + <b>2</b>
 
 If CellsValue = "1" Then
 With aUsForm 
 .OptionButton2.Value = True
 .OptionButton1.Enabled = False
 .OptionButton2.Enabled = False
 .LabelProgress.Height = <b>50</b>

 .Height = .LabelProgress.Top + .LabelProgress.Height + aDeltaForm 'Ошибку выдает тут. Что не нравится ему?
 
 End With
 End If

End Sub
8 ответов

timursmeta

> Автор: timursmeta> Приветствую Вас знатоки!> Помогите решить на первый взгляд элементарную проблему.> Приведенный код ниже выдает ошибку при выполнении. "свойство или метод Height не поддерживается". Не пойму как > такое возможно? Помогите пожалуйста.Да вроде все нормально, можно попробовать перенести функцию CustomizeForm в саму форму и вызывать её от имени формы, параметром передавая CellsValue


timursmeta

> Автор: timursmetaДа и ещё
Declare Function GetSystemMetrics Lib "User32" (ByVal nIndex As Long) As Long
и соответственно переменны не Integer, а Long


timursmeta

Да и ещёDeclare Function GetSystemMetrics Lib "User32" (ByVal nIndex As Long) As Longи соответственно переменны не Integer, а Long
Это вы верно заметили, но на результат ни как не повлияет ))
Да вроде все нормально, можно попробовать перенести функцию CustomizeForm в саму форму и вызывать её от имени формы
В том то и дело, что так работает(UserForm1.Height = 50)...Cуть заключается в том, что процедура CustomizeForm одинаковая для всех форм, а форм много и меняться эта процедура будет частенько, а так подправил в одном месте и красота )))И читаемость кода повышается...Хочу заметить, что свойства(Caption, Value, Top и другие) элементам управления на форме проставляется верно, а вот форме ширину и высоту не хочет менять.


timursmeta

Прикрепляю файлик для истенных гурманов, в нем и приведен этот несчастный пример. Обработчик висит на Worksheet_SelectionChange cкачать


timursmeta

> Автор: timursmetaНаверное никак, потому, что у класса MSForms.UserForm нет публичных свойств на изменение высоты формы. Они есть у самой формы, но если посмотреть в Object Browser'e то можно увидеть у UserForm1:
Property Height As Single Member of Unknown24._Form
Поэтому, я бы сделал бы отдельный класс, свойство Instancing - 2(PublicNotCreatable)(это для того, что-бы не забыть и не удалить реализацию)
Option Explicit

Public Sub CustomizeForm()
End Sub
и в каждой форме после Option Explicit добавил Implements "имя класса"и и определил-бы содержимое метода для каждой формы свое


timursmeta

timursmeta,найдите 1 отличие
Sub CustomizeForm(ByRef aUsForm)


 With aUsForm
 .CheckBox1.Caption = "Test"

 .Height = .CheckBox1.Top + <b>50</b>
 
 End With

End Sub


timursmeta

> Автор: big-duke> найдите 1 отличие Снимаю шляпу


timursmeta

Спасибо большое за помощь, я что вроде того и сделал!