宏运行时进度条运行

时间:2019-09-12 13:13:31

标签: excel vba excel-formula

我需要一些有关Excel中代码的帮助。 我创建了ProgressBar,并希望在我的宏运行时正常运行并显示(带有%)。

我尝试在主宏中添加参数UserForm1.Show vbModelessUserForm1.Repaint,但是没有用。

我的用户窗体进度条的代码如下:

Private Sub UserForm_Activate()    
    Dim reminder As Long        
    Dim i As Long, j As Long

    reminder = 0

    For i = 1 To 200        
        UserForm1.Label2.Width = UserForm1.Label2.Width + 1

        If i Mod 2 = 0 Then        
            reminder = reminder + 1        
            UserForm1.Caption1 = reminder & " % completed"        
        End If

        For j = 1 To 150        
            DoEvents        
        Next j        
    Next i

    Unload UserForm1    
End Sub

使用此方法时看到的内容-UserForm在0%处停止并且我的主宏正在运行结束,然后带有ProgressBar的UserForm从0到100%运行并关闭,但是我想同时使用UserForm和Main Macro

请帮助我解决这个问题。

2 个答案:

答案 0 :(得分:0)

那样不能工作。您需要3个功能 一个显示用户窗体进度栏为0%。 那么您需要一个函数来更新您的表格 结束功能删除表格 此代码未经测试,请参见我在此处发布的测试代码!

            Dim counter As Long        

            Public Sub UserForm_Activate()    
                counter = 0
                UserForm1.Label2.Width =0
                UserForm.show
            End Sub


            Public Sub UserForm_update()    
                if counter <100 then counter=counter+1
                UserForm1.Label2.Width =  counter
                DoEvents        
            end sub


            Public Sub UserForm_close()    
                counter = 0
                UserForm.hide
            End Sub


            'somewhere in a module or class

            sub calculate
                call UserForm_Activate()    
                for i=0 to 100
                   call UserForm_update()
                   'whatever 
   '  Sleep (200) if this very handy OS call is included somewhere
                next
                call UserForm_close
            end sub 

答案 1 :(得分:0)

工作: 我创建两个非模态!表单名为“进度栏” (带有1个文本框“ NAMED”计数器) 和“测试人员” (带有隐藏和显示的3个名为NAMED的按钮)

进度栏中的代码:

            Dim count As Long

            Public Sub progressbar_show()
                count = 0
                progressbar.Show
            End Sub


            Public Sub progressbar_update()
                If count < 100 Then count = count + 1
                progressbar.counter.Text = Str(count)
                DoEvents
            End Sub


            Public Sub progressbar_close()
                counter = 0
                progressbar.hide
            End Sub

测试器中的代码:(在进度条中调用例程)

            Private Sub count_Click()
                Call progressbar.progressbar_update
            End Sub

            Private Sub hide_Click()
                Call progressbar.progressbar_close
            End Sub

            Private Sub show_Click()
                Call progressbar.progressbar_show
            End Sub

按设计工作。 单击按钮上的文本框将在每次单击时更新。 请注意,我如何从窗体调用函数到另一窗体。表单名称必须包括在内。控件的名称也必须匹配。重命名控件和表单是个好主意。我用1700个控件制作了一个AutoCAD VBA。几周后就没乐趣了 想像一下commandbutton_762 actuelly可以做什么;)