2017-01-30 61 views
1

我有一個VBA宏,通過詢問用戶一系列問題(要求他們說哪一個打開的工作簿執行哪個功能)來打開。我有一系列userform.show的如下命令:Excel VBA未顯示用戶表單

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 

(現在,事情發生後,我意識到這將是更簡單地把這些變成一個用戶窗體)。

最終效果是不顯示。
經過一番研究,我改變了代碼:

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次迭代,才恢復到原來的問題。

我在用戶窗體初始化代碼中放置了斷點。他們都被調用並且用戶表單都工作了(直到我再次移除斷點)。

最後我開始刪除有問題的用戶表單:問題轉移到下一個問題。再一次,當它被刪除,以前的一個。

用戶窗體碼是相同的:

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