пользовательская форма vba excel не будет отображаться

Всем доброго утра!

У меня возникли проблемы с получением userfrom для показа.

Ниже приведен код, который я хочу использовать. Я объявляю Userfrom (oUserform) как общедоступную переменную, инициализирую ее и вношу изменения, а затем показываю.

В любом случае, это план, однако я получаю сообщение об ошибке с oUserform.show, в котором говорится, что объект не поддерживает свойство или метод.

    Public oUserform As UserForm
    Public iNumberOfRecords As Integer
    Public iEndRow As Integer

Sub subIntialize()

    Set oUserform = frmbusinessimpact

    iEndRow = Sheet1.Cells(1, 1).CurrentRegion.Rows.Count
    iNumberOfRecords = iEndRow - 1

    Call subPopulateRecordClass(iEndRow)

    With oUserform
        .TotalRecords = iNumberOfRecords
        .CurrentRecord = 1
        Call subUpdateUserform
    End With

    oUserform.Show

End Sub

Любые идеи?


person Rex B    schedule 24.03.2014    source источник
comment
Что такое frmbusinessimpact? Это имя существующей формы?   -  person L42    schedule 24.03.2014
comment
Да. У него нет кода для инициализации   -  person Rex B    schedule 24.03.2014
comment
Почему бы не использовать его напрямую вместо объявления? Есть особая причина?   -  person L42    schedule 24.03.2014
comment
Оно работает! Когда я использовал frmbusinessimpact.show вместо oUserform.Show, это сработало! Благодарю вас!   -  person Rex B    schedule 24.03.2014
comment
Прохладный. Рад, что это работает для вас. Однако, если вы хотите придерживаться своей логики, вы можете попробовать то, что опубликовал @DougGlancy. :) Ваше здоровье!   -  person L42    schedule 24.03.2014


Ответы (1)


Вы захотите объявить oUserform экземпляром frmbusinessimpact и использовать ключевое слово New.

Public oUserform As frmbusinessimpact
Public iNumberOfRecords As Integer
Public iEndRow As Integer

Sub subIntialize()

Set oUserform = New frmbusinessimpact

iEndRow = Sheet1.Cells(1, 1).CurrentRegion.Rows.Count
iNumberOfRecords = iEndRow - 1

Call subPopulateRecordClass(iEndRow)

With oUserform
    .TotalRecords = iNumberOfRecords
    .CurrentRecord = 1
    Call subUpdateUserform
End With

oUserform.Show

End Sub

The book Professional Excel Development есть хорошая глава о том, как и почему кодировать пользовательские формы таким образом. У меня есть более конкретный пример на http://yoursumbuddy.com/a-flexible-vba-chooser-form/.

person Doug Glancy    schedule 24.03.2014