2014-05-22 38 views
0

我似乎無法解決爲什麼這不會工作。我想爲每個A用戶窗體中的標籤增加寬度。VBA的用戶表單加載欄將不會運行直到窗口關閉

但是當我運行它時,其餘的子將不會運行,直到窗體關閉。我怎樣才能阻止這?

Sub movepost() 

    Dim a As Range 
    Dim rcount As Long 
    Dim load As Variant 

    Dim load1 As Variant 
    Dim width As Variant 

    width = fmLoadingBar.Label1.width 

     For Each a In Range("a2:A9999") 
      If a.Value = "" Then 
      rcount = a.Row 
      End If 

     Next a 

    DoEvents 
    fmLoadingBar.Show 


    rcount = (rcount - 1) * 12 
    load = width/rcount 
    fmLoadingBar.Label1.width = 0 


     For Each a In Range("A2:l9999") 

       If a.Column = 1 Then 

       ElseIf a.Column = 6 Then 
       ElseIf a.Column = 7 Then 

       ElseIf a.Column = 11 Then 

       ElseIf a.Value = "" Then 

        a.Value = a.Offset(0, -1).Value 
       ElseIf a.Value = "" And a.Offset(1, 0).Value = "" And a.Offset(1, 0).Value = "" And a.Offset(1, 0).Value = "" Then 

        Exit For 


       End If 

      load1 = load1 + load 

      fmLoadingBar.Label1.width = load1 

     Next a 
    Unload fmLoadingBar 

    End Sub 

回答

1

您的窗體顯示爲無參數,因此它默認爲模態窗體。你需要一個非模態形式,這意味着子將繼續而不用等待表單卸載。試試這個:

fmLoadingBar.Show vbModeless 

這是可能的循環不會給程序(Excel)中的時間做其他活動,那麼你問的是什麼(例如在屏幕上繪製圖形,或聽鼠標滾動等)。爲了讓Excel'循環查看'其他事件在循環中執行,可以在循環中使用DoEvents。但要小心,因爲它會讓你付出代價。先測試一下。

+0

我已經嘗試了兩個都無濟於事...... :( –

+0

當你顯示無模式的表單時會發生什麼?子表單還在等待表單關閉嗎?你可以嘗試首先加載表單,所以在你之前證明這一點。只要'負載fmLoadingBar'。 – Jzz

+0

形式顯示/定時器的自旋,但沒有棒材補給的動畫呢?我想它應該工作。 負載不工作到此結束了。我雖然已經制定了一些東西,如果我選擇另一個打開的窗口按預期的方式欄加載? –