2017-07-14 162 views
2

我在宏中使用'Worksheet_Change'事件,每次用戶在下拉菜單中選擇一個選項時,都需要大約15-20秒的時間才能運行,因爲訪問的數據範圍較大。我想在Excel中顯示非常基本的%完成狀態,讓用戶知道它正在處理中。使用默認的Excel Application.StatusBar就足夠了,但它在我的工作簿中不可見。運行Excel宏時顯示完成百分比

我的工作隱藏/顯示列宏:

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim R, V 
If Target.Address = ("$K$7") Then 
    V = [K7].Value 
    For Each R In Range("R3:GJU3") 
     If IsError(R.Value) Then 
      R.EntireColumn.Hidden = True 
     Else 
      R.EntireColumn.Hidden = R.Value <> V 
     End If 
    Next 
End If 

End Sub 

我發現下面的代碼放在一個單獨的線程,但我不確定如何爲基於我以上的宏我的目的,修改。

代碼下面信貸在Progress bar in VBA Excel

Option Explicit 

Sub StatusBar() 

Dim x    As Integer 
Dim MyTimer   As Double 

    'Change this loop as needed. 
    For x = 1 To 250 

     'Dummy Loop here just to waste time. 
     'Replace this loop with your actual code. 
     MyTimer = Timer 
     Do 
     Loop While Timer - MyTimer < 0.03 

     Application.StatusBar = "Progress: " & x & " of 250: " & Format(x/250, "Percent") 
     DoEvents 

    Next x 

    Application.StatusBar = False 

End Sub 
+0

這不是進度條,而是狀態欄中的顯示百分比。對於進度條,您需要知道如何使用用戶窗體。第二件事,你的代碼很慢,很慢。使用vba數組。 –

+0

@PatrickLepelletier我不熟悉vba數組。你有一個可以加快我的宏的例子嗎? – vash1422

+1

谷歌或StackOverflow搜索。你會發現很多例子。我無法在此添加此代碼,因爲它不是線程的問題。 (或者換個新的) –

回答

0

更新@eykanal代碼如下

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim R, V 
Dim x As Range 
Dim counter As Long 
counter = 1 

If Target.Address = ("$K$7") Then 
    V = [K7].Value 
    Set x = Range("R3:GJU3") 

    For Each R In Range("R3:GJU3") 
     If IsError(R.Value) Then 
      R.EntireColumn.Hidden = True 
     Else 
      R.EntireColumn.Hidden = R.Value <> V 
     End If 
     DoEvents 
     Application.StatusBar = Format(counter/x.Columns.Count, "Percent") 
     counter = counter + 1 
    Next R 
End If 

End Sub 
+0

嗨 - 謝謝你的回覆。我更新了代碼,但沒有看到狀態欄動態變化。工作表在運行宏時看起來相同,然後只顯示「100」。它不顯示跑步時的進度百分比。 – vash1422

+0

再次嘗試修改我所做的 – gr8tech

+0

與之前相同的功能 - 功能仍然存在,但沒有任何進展會動態顯示。宏完成運行後,此時的最終結果爲「100.00%」。 – vash1422

0

你可以使用進度用戶窗體,喜歡的東西

enter image description here

結束了

My Progre ssbar位於我的用戶表單的下半部分。 當循環時,你需要增加進度條的寬度(這裏是一個藍光按鈕)

這樣做的代碼是基本的(樹的簡單規則)。