2017-01-30 6 views
1

У меня есть макрос VBA, который открывается, задавая пользователю ряд вопросов (попросив их сказать, какая из открытых книг выполняет какую функцию). У меня есть ряд userform.show команд, как показано ниже:Excel VBA, не показывающий userform

UserForm2.Show ' select cost data file 
    Set piersBook = ActiveWorkbook 

    UserForm5.Show ' select IRR file 
    Set irrBook = ActiveWorkbook 

    UserForm6.Show ' select BC summary file 
    Set bcSummary = ActiveWorkbook 

(сейчас, после этого события, я понимаю, что это было бы более просто поместить их в один UserForm).

Чистый эффект для последнего не отображается.
После некоторых исследований я изменил код:

UserForm2.Show ' select cost data file 
    Set piersBook = ActiveWorkbook 

    UserForm5.Show ' select IRR file 
    Set irrBook = ActiveWorkbook 

    DoEvents 

    UserForm6.Show ' select BC summary file 
    Set bcSummary = ActiveWorkbook 

Это проработал около 5 или 6 итераций, прежде чем она вернулась к исходной задаче.

Я установил контрольные точки в код инициализации userform. Все они были вызваны, и пользовательские формы все работали (пока я не удалил точки останова).

Наконец-то я начал удалять нарушающую форму пользователя: проблема перешла к следующей. И снова, когда это было удалено, к тому, что было раньше. Код

The UserForms' идентична:

Private Sub ListBox1_Click() 
    Workbooks(ListBox1.Value).Activate 
    Unload Me 
End Sub 

Private Sub UserForm_Initialize() 

    Dim wb As Workbook 
    For Each wb In Workbooks 
    ListBox1.AddItem wb.Name 
    Next wb 
End Sub 

Любые мысли? В настоящий момент я жестко кодирую входы, которые не идеальны. Большое спасибо.

+0

Великими - Огромное спасибо. – user13167

ответ

1

использование только UserForm2, то:

  • изменить вашего UserForm2 код следующего

    Private Sub ListBox1_Click() 
        With Me 
         If ListBox1.ListIndex <> -1 Then 
          .Tag = .ListBox1.Value 
          .Hide 
         Else 
          MsgBox "You must select a workbook" 
         End If 
        End With 
    End Sub 
    
    Private Sub UserForm_Initialize() 
        Dim wb As Workbook 
        For Each wb In Workbooks 
        ListBox1.AddItem wb.Name 
        Next wb 
    End Sub 
    
  • изменить ваш "основной" код следующего

    Dim piersBook As Workbook, irrBook As Workbook, bcSummary As Workbook 
    
    With UserForm2 
        .Caption = "select cost data file" 
        .Show ' select cost data file 
        Set piersBook = Workbooks(.Tag) 
    
        .Caption = "select IRR file" 
        .Show ' select cost data file 
        Set irrBook = Workbooks(.Tag) 
    
        .Caption = "select BC summary file" 
        .Show ' select BC summary file 
        Set bcSummary = Workbooks(.Tag) 
    End With 
    Unload UserForm2 
    
Смежные вопросы