Установите ширину пользовательской формы из модуля, перебирая пользовательские формы - PullRequest
0 голосов
/ 28 мая 2020

Возникла очень неприятная проблема, и я не могу найти решение где-либо - помощь будет очень признательна!

Я знаю, как изменить ширину пользовательской формы из самой пользовательской формы ( Me.Width).

Проблема в том, что я пишу модуль, который будет динамически форматировать пользовательские формы. Модулю передается форма, и он выполняет некоторые манипуляции с ней. Пока все работает, пока я имею в виду объекты в форме.

Но теперь я пытаюсь сослаться на саму форму, и когда я пытаюсь изменить ширину (формы, а не элемента управления в форме) я получаю сообщение об ошибке: «Объект не поддерживает это свойство или метод».

Я пробовал объявить его как UserForm и как Object, и весь остальной код работает в обоих случаях, но изменение ширины - нет. Я сразу вижу, что ширина недоступна, поэтому, очевидно, код не выполняется.

Вот код, который я пробовал безуспешно:

Sub frmLoadLayoutTest()

frmLoadLayout frmTest
frmTest.Show

End Sub

Private Sub frmLoadLayout(frmActive As Object) 'Also tried (frmActive as UserForm)

'Setting the width of a control works
frmActive.Controls("labelTest").Width = 100 

'Setting the width of the form itself doesn't work
frmActive.Width = 100

End Sub

Если кто-то может предложить элегантное решение, это будет fantasti c. В качестве альтернативы, могу ли я ссылаться на пользовательскую форму по имени? (Что-то вроде Userform (frm1.name) .Width = 100)

Заранее спасибо!

1 Ответ

1 голос
/ 29 мая 2020

Попробуйте следующее:

Sub frmLoadLayoutTest()

    Dim frm As frmTest

    Set frm = New frmTest  '<<< create an instance of the form

    frmLoadLayout frm      '<<< pass in the instance
    frm.Show               '<<< show the instance

End Sub

Private Sub frmLoadLayout(frm As Object)
    With frm
        .Controls("labelTest").Width = 100
        .Width = 300
    End With
End Sub

См. Также, почему рекомендуется избегать «экземпляра по умолчанию» и создавать собственный явный экземпляр формы перед его использованием:

https://rubberduckvba.wordpress.com/2017/10/25/userform1-show/

...