我找到了一个Excel VBA脚本和“教程”,除了它没有真正破坏代码,条形码分成不同的部分。
http://spreadsheetpage.com/index.php/tip/displaying_a_progress_indicator/
随着进度条的流逝,附加到“demo”的脚本会将随机数添加到Excel工作表中。
表单上的代码没有做的是打破部分,所以说'这是随机数的代码,'这是实际进度条的代码。
有人可以解析这段代码并让那些不会说VBAeese的人以及那些似乎写出来的人更加“用户友好”吗?
提前致谢。
答案 0 :(得分:5)
以下是代码的评论很多的版本:
Sub Main()
' Inserts random numbers on the active worksheet
Dim Counter As Integer
Dim RowMax As Integer, ColMax As Integer
Dim r As Integer, c As Integer
Dim PctDone As Single
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
'- if this subroutine is ran on a sheet that is not called "Worksheet" then exit
'-- change 'Worksheet' to whatever sheet you want the progress bar on
Cells.Clear
'- clear all cells in active worksheet
Application.ScreenUpdating = False
'-disables updating the screen in the for loop that follows
'- that way if we are editing 1000 cells int he workbook it only needs to update them at the end when
'- this is set back to true
Counter = 1 '- counter counts what cell we are on
RowMax = 100 '- this is how many rows will be filled with data
ColMax = 25 '- this is how many columns will be filled with data
'- note that Rowmax * ColMax = 2,500 co counter will go from 1 to 2,500
For r = 1 To RowMax
'-for each row 1 to 100 we will loop through the 25 columns to add the random number
For c = 1 To ColMax
'- enter a random number into the cell we are on (Cells(r,c))
Cells(r, c) = Int(Rnd * 1000)
'- +1 to the coutner so we can count which cell we ar eon out of 2,500
Counter = Counter + 1
Next c
'- after finishing each column but before starting the next row
'- check what percent done we are (to update the userform)
PctDone = Counter / (RowMax * ColMax)
'- Edit the progressbar called "UserForm1" (already exists in workbook)
With UserForm1
'Userform has 2 items in it a Label called 'FrameProgress' and a onject called 'LabelProgress'
'Change the text in the Label called 'FrameProgress' to display the percent done we calculated earlier
.FrameProgress.Caption = Format(PctDone, "0%")
' Resize the object called 'LabelProgress' to be X perxent of the width of the previous label (minus 10 to leave room on the edge)
' - where X is the percent we are done
.LabelProgress.Width = PctDone * (.FrameProgress.Width - 10)
End With
' The DoEvents statement is responsible for the form updating
DoEvents
Next r
'- exit form when it is at 100%
Unload UserForm1
End Sub
对您有用的代码的唯一部分是要注意,虽然它正在循环,但它确定了它的完成百分比,然后使用它来更新表单。
如果您有很多代码,您可以简单地将其整个过程(假设您构建表单)
Sub Example()
'wait a few seconds
Application.Wait (100000)
'your code goes here instead of .wait
PctDone = 0.3
With UserForm1
'Userform has 2 items in it a Label called 'FrameProgress' and a onject called 'LabelProgress'
'Change the text in the Label called 'FrameProgress' to display the percent done we calculated earlier
.FrameProgress.Caption = Format(PctDone, "0%")
' Resize the object called 'LabelProgress' to be X perxent of the width of the previous label (minus 10 to leave room on the edge)
' - where X is the percent we are done
.LabelProgress.Width = PctDone * (.FrameProgress.Width - 10)
End With
'The DoEvents statement is responsible for the form updating
DoEvents
Application.Wait (100000)
'your code goes here instead of .wait
PctDone = 0.6
With UserForm1
.FrameProgress.Caption = Format(PctDone, "0%")
.LabelProgress.Width = PctDone * (.FrameProgress.Width - 10)
End With
DoEvents
Application.Wait (100000)
'your code goes here instead of .wait
PctDone = 0.9
With UserForm1
.FrameProgress.Caption = Format(PctDone, "0%")
.LabelProgress.Width = PctDone * (.FrameProgress.Width - 10)
End With
DoEvents
Application.Wait (100000)
'your code goes here instead of .wait
End Sub