23 个解决方案
#1
这个不难吧.可以用ProgressBar1控件,也可用picture控件画图:
给你一个例子参考:http://blog.csdn.net/chenjl1031/archive/2007/12/24/1964909.aspx
给你一个例子参考:http://blog.csdn.net/chenjl1031/archive/2007/12/24/1964909.aspx
#2
和程序的运行时间相同?天知道程序要运行多久,max怎么算
#3
程序的运行时间是什么意思?
#4
问题的关键是:你在某一个操作之前(需要显示进度的操作),能够确定它需要的时间吗?
或者在操作过程中,能够“及时”的知道“当前进度”(现在完成的百分比)吗?
如果能做到上面的任一点,你的“进度”要求就太容易实现了。
如果哪一点都做不到,恐怕你的希望有点渺茫。
或者在操作过程中,能够“及时”的知道“当前进度”(现在完成的百分比)吗?
如果能做到上面的任一点,你的“进度”要求就太容易实现了。
如果哪一点都做不到,恐怕你的希望有点渺茫。
#5
打个比方来说,就像我们平时复制文件的那个进度条一样,文件复制结束了,进度条就到100了。我在模块中定义了一个函数是来处理表格的,大概有一定的时间来完成,我就是想让它运行的时候来显示进度条啊。
#6
那你那个“函数”每次要处理的总行数(或记录总数)应该积知道吧?
简单的方法:
1. 在窗体中添加一下进度条控件。
2. 设置控件的最大值为100,最小值为0
3. 刚进入函数的时候,设置控件的Value为0。
4. 循环处理过程中,设置控件的Value = 已处理行数÷待处理总行数×100。
简单的方法:
1. 在窗体中添加一下进度条控件。
2. 设置控件的最大值为100,最小值为0
3. 刚进入函数的时候,设置控件的Value为0。
4. 循环处理过程中,设置控件的Value = 已处理行数÷待处理总行数×100。
#7
楼主熬通宵,max=24小时
#8
8013你的想法,我也想过,就是不知道怎么来判断已经处理的行数啊?假如我的函数有50行,怎么能判断当前处理到哪一行呢?
#9
不是程序代码的行数,是你所处理的表格的行数,比如你的表有100行,你处理到第39行,那值就是39呀
#10
无语..........
我看你不是“曾经的黄毛小子”,而是目前就是一个“黄毛小子”。
看楼上给你有解释吧。
#11
Sub Report_0()
Range("A:AO").NumberFormatLocal = "@"
Columns("L:N").NumberFormatLocal = "yyyy-mm-dd"
Range("A:E,H:K").HorizontalAlignment = -4108&
Range("L:AO").HorizontalAlignment = -4152&
Range("O:O,R:R").HorizontalAlignment = -4108&
Rows("1:1").RowHeight = 20#
Rows("2:2").RowHeight = 29.3
Rows("1:2").HorizontalAlignment = -4108&
Rows("1:2").VerticalAlignment = -4108&
Rows("1:2").Font.Size = 10
Rows("1:2").Font.Bold = True
Range("A1:A2").Select: DoEvents
Selection.Merge
Columns("A:A").ColumnWidth = 6.3
ActiveCell.FormulaR1C1 = "备注"
Range("B1:B2").Select
Selection.Merge
Columns("B:B").ColumnWidth = 6.6
ActiveCell.FormulaR1C1 = "使用" & vbLf & "单位"
Range("C1:C2").Select
Selection.Merge
...................
ActiveWindow.FreezePanes = True
labSumLine.Caption = mlPointPublic
labOpeLine.Caption = "1"
labGuage.Visible = True: labStaMsg.Font.Size = 9
mlOpeLine = 2&: mlTempE = 1&
For mlTempA = 1& To mlPointPublic
labOpeLine.Caption = mlTempA
labGuage.Width = 237.5 * mlTempA / mlPointPublic
DoEvents
mlOpeLine = mlOpeLine + 1&
Range("A" & mlOpeLine).Select
ActiveCell.Formula = msPubField(1&, mlTempA)
Range("B" & mlOpeLine).Formula = msPubField(2&, mlTempA)
Range("C" & mlOpeLine).Formula = msPubField(3&, mlTempA)
Range("D" & mlOpeLine).Formula = msPubField(4&, mlTempA)
Range("E" & mlOpeLine).Formula = msPubField(5&, mlTempA)
Range("F" & mlOpeLine).Formula = msPubField(6&, mlTempA)
Range("G" & mlOpeLine).Formula = msPubField(7&, mlTempA)
Range("H" & mlOpeLine).Formula = msPubField(8&, mlTempA)
Range("I" & mlOpeLine).Formula = msPubField(9&, mlTempA)
Range("J" & mlOpeLine).Formula = msPubField(10&, mlTempA)
Range("K" & mlOpeLine).Formula = msPubField(11&, mlTempA)
Range("L" & mlOpeLine).Formula = CLng(msPubField(12&, mlTempA))
If (msPubField(13&, mlTempA) > "") Then
Range("M" & mlOpeLine).Formula = CLng(msPubField(13&, mlTempA))
End If
If (msPubField(14&, mlTempA) > "") Then
Range("N" & mlOpeLine).Formula = CLng(msPubField(14&, mlTempA))
End If
Range("O" & mlOpeLine).Formula = msPubField(15&, mlTempA)
Range("Q" & mlOpeLine).Formula = Format$(msPubField(16&, mlTempA), "0.00")
Range("R" & mlOpeLine).Formula = msPubField(17&, mlTempA)
Range("S" & mlOpeLine).Formula = Format$(msPubField(18&, mlTempA), "0.00")
For mlTempD = 1& To 7&
Range(Chr$(83& + mlTempD) & mlOpeLine).Formula = Format$(mgPubTime(mlTempD, mlTempA), "0.00")
Next
For mlTempD = 8& To 22&
Range("A" & Chr$(57& + mlTempD) & mlOpeLine).Formula = Format$(mgPubTime(mlTempD, mlTempA), "0.00")
Next
Next
Range("A1").Select
Range("A:A").Insert Shift:=-4161&
Range("A:A").ColumnWidth = 1.5
Range("A:A").Font.ColorIndex = 3
Range("A1:A2").Merge
Range("A1").HorizontalAlignment = -4131&
Range("A1").WrapText = True
Range("A1").Formula = "是否完工"
Range("A3").Select
End Sub
==============================
这是我的一个报表处理系统中的一小部分。
注意上面蓝色字体部分。
我是用一个标签来指示进度的,用进度条控件实质也是一回事(只是在我的那个具体的应用环境中,用标签更好)。
变量 mlTempA 的值代表已处理到哪条记录。
变量 mlPointPublic 的值就是这一次要处理的记录总数。
Range("A:AO").NumberFormatLocal = "@"
Columns("L:N").NumberFormatLocal = "yyyy-mm-dd"
Range("A:E,H:K").HorizontalAlignment = -4108&
Range("L:AO").HorizontalAlignment = -4152&
Range("O:O,R:R").HorizontalAlignment = -4108&
Rows("1:1").RowHeight = 20#
Rows("2:2").RowHeight = 29.3
Rows("1:2").HorizontalAlignment = -4108&
Rows("1:2").VerticalAlignment = -4108&
Rows("1:2").Font.Size = 10
Rows("1:2").Font.Bold = True
Range("A1:A2").Select: DoEvents
Selection.Merge
Columns("A:A").ColumnWidth = 6.3
ActiveCell.FormulaR1C1 = "备注"
Range("B1:B2").Select
Selection.Merge
Columns("B:B").ColumnWidth = 6.6
ActiveCell.FormulaR1C1 = "使用" & vbLf & "单位"
Range("C1:C2").Select
Selection.Merge
...................
ActiveWindow.FreezePanes = True
labSumLine.Caption = mlPointPublic
labOpeLine.Caption = "1"
labGuage.Visible = True: labStaMsg.Font.Size = 9
mlOpeLine = 2&: mlTempE = 1&
For mlTempA = 1& To mlPointPublic
labOpeLine.Caption = mlTempA
labGuage.Width = 237.5 * mlTempA / mlPointPublic
DoEvents
mlOpeLine = mlOpeLine + 1&
Range("A" & mlOpeLine).Select
ActiveCell.Formula = msPubField(1&, mlTempA)
Range("B" & mlOpeLine).Formula = msPubField(2&, mlTempA)
Range("C" & mlOpeLine).Formula = msPubField(3&, mlTempA)
Range("D" & mlOpeLine).Formula = msPubField(4&, mlTempA)
Range("E" & mlOpeLine).Formula = msPubField(5&, mlTempA)
Range("F" & mlOpeLine).Formula = msPubField(6&, mlTempA)
Range("G" & mlOpeLine).Formula = msPubField(7&, mlTempA)
Range("H" & mlOpeLine).Formula = msPubField(8&, mlTempA)
Range("I" & mlOpeLine).Formula = msPubField(9&, mlTempA)
Range("J" & mlOpeLine).Formula = msPubField(10&, mlTempA)
Range("K" & mlOpeLine).Formula = msPubField(11&, mlTempA)
Range("L" & mlOpeLine).Formula = CLng(msPubField(12&, mlTempA))
If (msPubField(13&, mlTempA) > "") Then
Range("M" & mlOpeLine).Formula = CLng(msPubField(13&, mlTempA))
End If
If (msPubField(14&, mlTempA) > "") Then
Range("N" & mlOpeLine).Formula = CLng(msPubField(14&, mlTempA))
End If
Range("O" & mlOpeLine).Formula = msPubField(15&, mlTempA)
Range("Q" & mlOpeLine).Formula = Format$(msPubField(16&, mlTempA), "0.00")
Range("R" & mlOpeLine).Formula = msPubField(17&, mlTempA)
Range("S" & mlOpeLine).Formula = Format$(msPubField(18&, mlTempA), "0.00")
For mlTempD = 1& To 7&
Range(Chr$(83& + mlTempD) & mlOpeLine).Formula = Format$(mgPubTime(mlTempD, mlTempA), "0.00")
Next
For mlTempD = 8& To 22&
Range("A" & Chr$(57& + mlTempD) & mlOpeLine).Formula = Format$(mgPubTime(mlTempD, mlTempA), "0.00")
Next
Next
Range("A1").Select
Range("A:A").Insert Shift:=-4161&
Range("A:A").ColumnWidth = 1.5
Range("A:A").Font.ColorIndex = 3
Range("A1:A2").Merge
Range("A1").HorizontalAlignment = -4131&
Range("A1").WrapText = True
Range("A1").Formula = "是否完工"
Range("A3").Select
End Sub
==============================
这是我的一个报表处理系统中的一小部分。
注意上面蓝色字体部分。
我是用一个标签来指示进度的,用进度条控件实质也是一回事(只是在我的那个具体的应用环境中,用标签更好)。
变量 mlTempA 的值代表已处理到哪条记录。
变量 mlPointPublic 的值就是这一次要处理的记录总数。
#12
哈哈.
顶这个.
#13
老马又在灌水 ^_^
#14
他这个问题,只能得到程序运行以来,所经过的时间.
由于不知道MAX值(天知道程序要运行多久),那应该是无法使用进度条控件来显示了.
帮顶顶.
看看高手们有啥说法.
由于不知道MAX值(天知道程序要运行多久),那应该是无法使用进度条控件来显示了.
帮顶顶.
看看高手们有啥说法.
#15
其实我有一个方法,就是有一点不地道,就是在程序段中多设置几个断点,比如做10个断点,每当经过一个断点的时候就到10%,但是这么做,我倒认为不如不加了,简直是个累赘。但是程序运行有一定的时间,不能让人家一直在等吧,不明白的人还以为程序中断了,或者干脆结束任务了。
#16
回LS:
难道你的表格是用一大堆的顺序语句来完成的(你在5楼说的处理一个表格)?
不可能是这样的吧?
你某次调用“这个函数”时,要处理的表格有多少行都不知道?
你看一下我在11楼的代码,我再把它“浓缩”一下:
labGuage.Visible = True '使我的“进度条”显示出来
mlOpeLine = 2&: mlTempE = 1&
For mlTempA = 1& To mlPointPublic 'mlPointPublic的值是要处理的记录总数
labOpeLine.Caption = mlTempA '在窗体的一个标签上显示处理到了第几条
labGuage.Width = 237.5 * mlTempA / mlPointPublic '计算“进度”
DoEvents '使窗口刷新
..............
Next
当处理到最后一条记录时,mlTempA = mlPiontPublic
这时我用的“进度条”labGuage.Width = 237.5 ,从窗口上看来,这个“进度”就是100%了。
这只是其中一张报表的。窗体上会显示正在处理哪张报表。
我不明白你在楼上说的什么“设置断点”是什么意思。“处理进度”跟断点、程序执行到函数中的哪句有什么关系呀?
我在四楼的回复,你究竟看过没有?
如果你还弄不明白的话,我实在无话可说了。 -_-!
难道你的表格是用一大堆的顺序语句来完成的(你在5楼说的处理一个表格)?
不可能是这样的吧?
你某次调用“这个函数”时,要处理的表格有多少行都不知道?
你看一下我在11楼的代码,我再把它“浓缩”一下:
labGuage.Visible = True '使我的“进度条”显示出来
mlOpeLine = 2&: mlTempE = 1&
For mlTempA = 1& To mlPointPublic 'mlPointPublic的值是要处理的记录总数
labOpeLine.Caption = mlTempA '在窗体的一个标签上显示处理到了第几条
labGuage.Width = 237.5 * mlTempA / mlPointPublic '计算“进度”
DoEvents '使窗口刷新
..............
Next
当处理到最后一条记录时,mlTempA = mlPiontPublic
这时我用的“进度条”labGuage.Width = 237.5 ,从窗口上看来,这个“进度”就是100%了。
这只是其中一张报表的。窗体上会显示正在处理哪张报表。
我不明白你在楼上说的什么“设置断点”是什么意思。“处理进度”跟断点、程序执行到函数中的哪句有什么关系呀?
我在四楼的回复,你究竟看过没有?
如果你还弄不明白的话,我实在无话可说了。 -_-!
#17
8013:您说的很对,我就是用一大堆顺序语句来执行的。
其实我这个过程也没有什么。
就是把上面发来的电子表格筛选出来(每一次发的表格都是一样的),然后删除一些没有用的数据,把有用的数据保存在一个新表中。不知道为什么运行的速度为什么这么慢,是不是我的代码有问题呢?下面是代码(vba):
sub init()
Application.ScreenUpdating = False'传说可以提高运行速度
School = "jrsz"
If Range("A1") = "" Then '删除表格的表头。
Rows("1:1").Delete Shift:=xlUp
End If
ActiveWindow.FreezePanes = False '解冻
Sheets(1).Range("C1").AutoFilter _
field:=3, _
Criteria1:=School
Cells.Copy
Set newbook = Workbooks.Add
Set NewSheet = Worksheets.Add '创建新表
NewSheet.Name = School & "成绩表"
NewSheet.Paste
Range("A:D,H:H,L:L,J:J,U:U").Delete
Set mysheet = Application.ActiveSheet
mysheet.Columns.AutoFit
Application.DisplayAlerts = False '关闭excel提示框
newbook.SaveAs Filename:="d:\" & School, accessmode:=xlExclusive
newbook.Close
Application.DisplayAlerts = True ' 打开excel提示框
Application.ScreenUpdating = True '打开屏幕更新
End Sub
其实我这个过程也没有什么。
就是把上面发来的电子表格筛选出来(每一次发的表格都是一样的),然后删除一些没有用的数据,把有用的数据保存在一个新表中。不知道为什么运行的速度为什么这么慢,是不是我的代码有问题呢?下面是代码(vba):
sub init()
Application.ScreenUpdating = False'传说可以提高运行速度
School = "jrsz"
If Range("A1") = "" Then '删除表格的表头。
Rows("1:1").Delete Shift:=xlUp
End If
ActiveWindow.FreezePanes = False '解冻
Sheets(1).Range("C1").AutoFilter _
field:=3, _
Criteria1:=School
Cells.Copy
Set newbook = Workbooks.Add
Set NewSheet = Worksheets.Add '创建新表
NewSheet.Name = School & "成绩表"
NewSheet.Paste
Range("A:D,H:H,L:L,J:J,U:U").Delete
Set mysheet = Application.ActiveSheet
mysheet.Columns.AutoFit
Application.DisplayAlerts = False '关闭excel提示框
newbook.SaveAs Filename:="d:\" & School, accessmode:=xlExclusive
newbook.Close
Application.DisplayAlerts = True ' 打开excel提示框
Application.ScreenUpdating = True '打开屏幕更新
End Sub
#18
最好是提高运行速度,不去耽误用户时间
#19
...........搞了半天,是想把处理进度报告给用户????
我服~~~~~~路过.
我服~~~~~~路过.
#20
自己手动把程序分为几段,在分段的地方加上进度条控制代码
#21
若是这样的话,只能用另一种方法,即一个滚动条从左往右不断滚动,并显示“处理中,请稍候”这样的字样,没有具体进度,但是让用户知道程序不是死掉,而是在处理,很多程序都是这样干的。
#22
顶21楼的意见,还是用“处理中,请稍候”这样的字较好
#23
同意,同时也感谢,8013,老马,泰山,东方之珠等人,谢谢你们无私的奉献!结贴中……
#1
这个不难吧.可以用ProgressBar1控件,也可用picture控件画图:
给你一个例子参考:http://blog.csdn.net/chenjl1031/archive/2007/12/24/1964909.aspx
给你一个例子参考:http://blog.csdn.net/chenjl1031/archive/2007/12/24/1964909.aspx
#2
和程序的运行时间相同?天知道程序要运行多久,max怎么算
#3
程序的运行时间是什么意思?
#4
问题的关键是:你在某一个操作之前(需要显示进度的操作),能够确定它需要的时间吗?
或者在操作过程中,能够“及时”的知道“当前进度”(现在完成的百分比)吗?
如果能做到上面的任一点,你的“进度”要求就太容易实现了。
如果哪一点都做不到,恐怕你的希望有点渺茫。
或者在操作过程中,能够“及时”的知道“当前进度”(现在完成的百分比)吗?
如果能做到上面的任一点,你的“进度”要求就太容易实现了。
如果哪一点都做不到,恐怕你的希望有点渺茫。
#5
打个比方来说,就像我们平时复制文件的那个进度条一样,文件复制结束了,进度条就到100了。我在模块中定义了一个函数是来处理表格的,大概有一定的时间来完成,我就是想让它运行的时候来显示进度条啊。
#6
那你那个“函数”每次要处理的总行数(或记录总数)应该积知道吧?
简单的方法:
1. 在窗体中添加一下进度条控件。
2. 设置控件的最大值为100,最小值为0
3. 刚进入函数的时候,设置控件的Value为0。
4. 循环处理过程中,设置控件的Value = 已处理行数÷待处理总行数×100。
简单的方法:
1. 在窗体中添加一下进度条控件。
2. 设置控件的最大值为100,最小值为0
3. 刚进入函数的时候,设置控件的Value为0。
4. 循环处理过程中,设置控件的Value = 已处理行数÷待处理总行数×100。
#7
楼主熬通宵,max=24小时
#8
8013你的想法,我也想过,就是不知道怎么来判断已经处理的行数啊?假如我的函数有50行,怎么能判断当前处理到哪一行呢?
#9
不是程序代码的行数,是你所处理的表格的行数,比如你的表有100行,你处理到第39行,那值就是39呀
#10
无语..........
我看你不是“曾经的黄毛小子”,而是目前就是一个“黄毛小子”。
看楼上给你有解释吧。
#11
Sub Report_0()
Range("A:AO").NumberFormatLocal = "@"
Columns("L:N").NumberFormatLocal = "yyyy-mm-dd"
Range("A:E,H:K").HorizontalAlignment = -4108&
Range("L:AO").HorizontalAlignment = -4152&
Range("O:O,R:R").HorizontalAlignment = -4108&
Rows("1:1").RowHeight = 20#
Rows("2:2").RowHeight = 29.3
Rows("1:2").HorizontalAlignment = -4108&
Rows("1:2").VerticalAlignment = -4108&
Rows("1:2").Font.Size = 10
Rows("1:2").Font.Bold = True
Range("A1:A2").Select: DoEvents
Selection.Merge
Columns("A:A").ColumnWidth = 6.3
ActiveCell.FormulaR1C1 = "备注"
Range("B1:B2").Select
Selection.Merge
Columns("B:B").ColumnWidth = 6.6
ActiveCell.FormulaR1C1 = "使用" & vbLf & "单位"
Range("C1:C2").Select
Selection.Merge
...................
ActiveWindow.FreezePanes = True
labSumLine.Caption = mlPointPublic
labOpeLine.Caption = "1"
labGuage.Visible = True: labStaMsg.Font.Size = 9
mlOpeLine = 2&: mlTempE = 1&
For mlTempA = 1& To mlPointPublic
labOpeLine.Caption = mlTempA
labGuage.Width = 237.5 * mlTempA / mlPointPublic
DoEvents
mlOpeLine = mlOpeLine + 1&
Range("A" & mlOpeLine).Select
ActiveCell.Formula = msPubField(1&, mlTempA)
Range("B" & mlOpeLine).Formula = msPubField(2&, mlTempA)
Range("C" & mlOpeLine).Formula = msPubField(3&, mlTempA)
Range("D" & mlOpeLine).Formula = msPubField(4&, mlTempA)
Range("E" & mlOpeLine).Formula = msPubField(5&, mlTempA)
Range("F" & mlOpeLine).Formula = msPubField(6&, mlTempA)
Range("G" & mlOpeLine).Formula = msPubField(7&, mlTempA)
Range("H" & mlOpeLine).Formula = msPubField(8&, mlTempA)
Range("I" & mlOpeLine).Formula = msPubField(9&, mlTempA)
Range("J" & mlOpeLine).Formula = msPubField(10&, mlTempA)
Range("K" & mlOpeLine).Formula = msPubField(11&, mlTempA)
Range("L" & mlOpeLine).Formula = CLng(msPubField(12&, mlTempA))
If (msPubField(13&, mlTempA) > "") Then
Range("M" & mlOpeLine).Formula = CLng(msPubField(13&, mlTempA))
End If
If (msPubField(14&, mlTempA) > "") Then
Range("N" & mlOpeLine).Formula = CLng(msPubField(14&, mlTempA))
End If
Range("O" & mlOpeLine).Formula = msPubField(15&, mlTempA)
Range("Q" & mlOpeLine).Formula = Format$(msPubField(16&, mlTempA), "0.00")
Range("R" & mlOpeLine).Formula = msPubField(17&, mlTempA)
Range("S" & mlOpeLine).Formula = Format$(msPubField(18&, mlTempA), "0.00")
For mlTempD = 1& To 7&
Range(Chr$(83& + mlTempD) & mlOpeLine).Formula = Format$(mgPubTime(mlTempD, mlTempA), "0.00")
Next
For mlTempD = 8& To 22&
Range("A" & Chr$(57& + mlTempD) & mlOpeLine).Formula = Format$(mgPubTime(mlTempD, mlTempA), "0.00")
Next
Next
Range("A1").Select
Range("A:A").Insert Shift:=-4161&
Range("A:A").ColumnWidth = 1.5
Range("A:A").Font.ColorIndex = 3
Range("A1:A2").Merge
Range("A1").HorizontalAlignment = -4131&
Range("A1").WrapText = True
Range("A1").Formula = "是否完工"
Range("A3").Select
End Sub
==============================
这是我的一个报表处理系统中的一小部分。
注意上面蓝色字体部分。
我是用一个标签来指示进度的,用进度条控件实质也是一回事(只是在我的那个具体的应用环境中,用标签更好)。
变量 mlTempA 的值代表已处理到哪条记录。
变量 mlPointPublic 的值就是这一次要处理的记录总数。
Range("A:AO").NumberFormatLocal = "@"
Columns("L:N").NumberFormatLocal = "yyyy-mm-dd"
Range("A:E,H:K").HorizontalAlignment = -4108&
Range("L:AO").HorizontalAlignment = -4152&
Range("O:O,R:R").HorizontalAlignment = -4108&
Rows("1:1").RowHeight = 20#
Rows("2:2").RowHeight = 29.3
Rows("1:2").HorizontalAlignment = -4108&
Rows("1:2").VerticalAlignment = -4108&
Rows("1:2").Font.Size = 10
Rows("1:2").Font.Bold = True
Range("A1:A2").Select: DoEvents
Selection.Merge
Columns("A:A").ColumnWidth = 6.3
ActiveCell.FormulaR1C1 = "备注"
Range("B1:B2").Select
Selection.Merge
Columns("B:B").ColumnWidth = 6.6
ActiveCell.FormulaR1C1 = "使用" & vbLf & "单位"
Range("C1:C2").Select
Selection.Merge
...................
ActiveWindow.FreezePanes = True
labSumLine.Caption = mlPointPublic
labOpeLine.Caption = "1"
labGuage.Visible = True: labStaMsg.Font.Size = 9
mlOpeLine = 2&: mlTempE = 1&
For mlTempA = 1& To mlPointPublic
labOpeLine.Caption = mlTempA
labGuage.Width = 237.5 * mlTempA / mlPointPublic
DoEvents
mlOpeLine = mlOpeLine + 1&
Range("A" & mlOpeLine).Select
ActiveCell.Formula = msPubField(1&, mlTempA)
Range("B" & mlOpeLine).Formula = msPubField(2&, mlTempA)
Range("C" & mlOpeLine).Formula = msPubField(3&, mlTempA)
Range("D" & mlOpeLine).Formula = msPubField(4&, mlTempA)
Range("E" & mlOpeLine).Formula = msPubField(5&, mlTempA)
Range("F" & mlOpeLine).Formula = msPubField(6&, mlTempA)
Range("G" & mlOpeLine).Formula = msPubField(7&, mlTempA)
Range("H" & mlOpeLine).Formula = msPubField(8&, mlTempA)
Range("I" & mlOpeLine).Formula = msPubField(9&, mlTempA)
Range("J" & mlOpeLine).Formula = msPubField(10&, mlTempA)
Range("K" & mlOpeLine).Formula = msPubField(11&, mlTempA)
Range("L" & mlOpeLine).Formula = CLng(msPubField(12&, mlTempA))
If (msPubField(13&, mlTempA) > "") Then
Range("M" & mlOpeLine).Formula = CLng(msPubField(13&, mlTempA))
End If
If (msPubField(14&, mlTempA) > "") Then
Range("N" & mlOpeLine).Formula = CLng(msPubField(14&, mlTempA))
End If
Range("O" & mlOpeLine).Formula = msPubField(15&, mlTempA)
Range("Q" & mlOpeLine).Formula = Format$(msPubField(16&, mlTempA), "0.00")
Range("R" & mlOpeLine).Formula = msPubField(17&, mlTempA)
Range("S" & mlOpeLine).Formula = Format$(msPubField(18&, mlTempA), "0.00")
For mlTempD = 1& To 7&
Range(Chr$(83& + mlTempD) & mlOpeLine).Formula = Format$(mgPubTime(mlTempD, mlTempA), "0.00")
Next
For mlTempD = 8& To 22&
Range("A" & Chr$(57& + mlTempD) & mlOpeLine).Formula = Format$(mgPubTime(mlTempD, mlTempA), "0.00")
Next
Next
Range("A1").Select
Range("A:A").Insert Shift:=-4161&
Range("A:A").ColumnWidth = 1.5
Range("A:A").Font.ColorIndex = 3
Range("A1:A2").Merge
Range("A1").HorizontalAlignment = -4131&
Range("A1").WrapText = True
Range("A1").Formula = "是否完工"
Range("A3").Select
End Sub
==============================
这是我的一个报表处理系统中的一小部分。
注意上面蓝色字体部分。
我是用一个标签来指示进度的,用进度条控件实质也是一回事(只是在我的那个具体的应用环境中,用标签更好)。
变量 mlTempA 的值代表已处理到哪条记录。
变量 mlPointPublic 的值就是这一次要处理的记录总数。
#12
哈哈.
顶这个.
#13
老马又在灌水 ^_^
#14
他这个问题,只能得到程序运行以来,所经过的时间.
由于不知道MAX值(天知道程序要运行多久),那应该是无法使用进度条控件来显示了.
帮顶顶.
看看高手们有啥说法.
由于不知道MAX值(天知道程序要运行多久),那应该是无法使用进度条控件来显示了.
帮顶顶.
看看高手们有啥说法.
#15
其实我有一个方法,就是有一点不地道,就是在程序段中多设置几个断点,比如做10个断点,每当经过一个断点的时候就到10%,但是这么做,我倒认为不如不加了,简直是个累赘。但是程序运行有一定的时间,不能让人家一直在等吧,不明白的人还以为程序中断了,或者干脆结束任务了。
#16
回LS:
难道你的表格是用一大堆的顺序语句来完成的(你在5楼说的处理一个表格)?
不可能是这样的吧?
你某次调用“这个函数”时,要处理的表格有多少行都不知道?
你看一下我在11楼的代码,我再把它“浓缩”一下:
labGuage.Visible = True '使我的“进度条”显示出来
mlOpeLine = 2&: mlTempE = 1&
For mlTempA = 1& To mlPointPublic 'mlPointPublic的值是要处理的记录总数
labOpeLine.Caption = mlTempA '在窗体的一个标签上显示处理到了第几条
labGuage.Width = 237.5 * mlTempA / mlPointPublic '计算“进度”
DoEvents '使窗口刷新
..............
Next
当处理到最后一条记录时,mlTempA = mlPiontPublic
这时我用的“进度条”labGuage.Width = 237.5 ,从窗口上看来,这个“进度”就是100%了。
这只是其中一张报表的。窗体上会显示正在处理哪张报表。
我不明白你在楼上说的什么“设置断点”是什么意思。“处理进度”跟断点、程序执行到函数中的哪句有什么关系呀?
我在四楼的回复,你究竟看过没有?
如果你还弄不明白的话,我实在无话可说了。 -_-!
难道你的表格是用一大堆的顺序语句来完成的(你在5楼说的处理一个表格)?
不可能是这样的吧?
你某次调用“这个函数”时,要处理的表格有多少行都不知道?
你看一下我在11楼的代码,我再把它“浓缩”一下:
labGuage.Visible = True '使我的“进度条”显示出来
mlOpeLine = 2&: mlTempE = 1&
For mlTempA = 1& To mlPointPublic 'mlPointPublic的值是要处理的记录总数
labOpeLine.Caption = mlTempA '在窗体的一个标签上显示处理到了第几条
labGuage.Width = 237.5 * mlTempA / mlPointPublic '计算“进度”
DoEvents '使窗口刷新
..............
Next
当处理到最后一条记录时,mlTempA = mlPiontPublic
这时我用的“进度条”labGuage.Width = 237.5 ,从窗口上看来,这个“进度”就是100%了。
这只是其中一张报表的。窗体上会显示正在处理哪张报表。
我不明白你在楼上说的什么“设置断点”是什么意思。“处理进度”跟断点、程序执行到函数中的哪句有什么关系呀?
我在四楼的回复,你究竟看过没有?
如果你还弄不明白的话,我实在无话可说了。 -_-!
#17
8013:您说的很对,我就是用一大堆顺序语句来执行的。
其实我这个过程也没有什么。
就是把上面发来的电子表格筛选出来(每一次发的表格都是一样的),然后删除一些没有用的数据,把有用的数据保存在一个新表中。不知道为什么运行的速度为什么这么慢,是不是我的代码有问题呢?下面是代码(vba):
sub init()
Application.ScreenUpdating = False'传说可以提高运行速度
School = "jrsz"
If Range("A1") = "" Then '删除表格的表头。
Rows("1:1").Delete Shift:=xlUp
End If
ActiveWindow.FreezePanes = False '解冻
Sheets(1).Range("C1").AutoFilter _
field:=3, _
Criteria1:=School
Cells.Copy
Set newbook = Workbooks.Add
Set NewSheet = Worksheets.Add '创建新表
NewSheet.Name = School & "成绩表"
NewSheet.Paste
Range("A:D,H:H,L:L,J:J,U:U").Delete
Set mysheet = Application.ActiveSheet
mysheet.Columns.AutoFit
Application.DisplayAlerts = False '关闭excel提示框
newbook.SaveAs Filename:="d:\" & School, accessmode:=xlExclusive
newbook.Close
Application.DisplayAlerts = True ' 打开excel提示框
Application.ScreenUpdating = True '打开屏幕更新
End Sub
其实我这个过程也没有什么。
就是把上面发来的电子表格筛选出来(每一次发的表格都是一样的),然后删除一些没有用的数据,把有用的数据保存在一个新表中。不知道为什么运行的速度为什么这么慢,是不是我的代码有问题呢?下面是代码(vba):
sub init()
Application.ScreenUpdating = False'传说可以提高运行速度
School = "jrsz"
If Range("A1") = "" Then '删除表格的表头。
Rows("1:1").Delete Shift:=xlUp
End If
ActiveWindow.FreezePanes = False '解冻
Sheets(1).Range("C1").AutoFilter _
field:=3, _
Criteria1:=School
Cells.Copy
Set newbook = Workbooks.Add
Set NewSheet = Worksheets.Add '创建新表
NewSheet.Name = School & "成绩表"
NewSheet.Paste
Range("A:D,H:H,L:L,J:J,U:U").Delete
Set mysheet = Application.ActiveSheet
mysheet.Columns.AutoFit
Application.DisplayAlerts = False '关闭excel提示框
newbook.SaveAs Filename:="d:\" & School, accessmode:=xlExclusive
newbook.Close
Application.DisplayAlerts = True ' 打开excel提示框
Application.ScreenUpdating = True '打开屏幕更新
End Sub
#18
最好是提高运行速度,不去耽误用户时间
#19
...........搞了半天,是想把处理进度报告给用户????
我服~~~~~~路过.
我服~~~~~~路过.
#20
自己手动把程序分为几段,在分段的地方加上进度条控制代码
#21
若是这样的话,只能用另一种方法,即一个滚动条从左往右不断滚动,并显示“处理中,请稍候”这样的字样,没有具体进度,但是让用户知道程序不是死掉,而是在处理,很多程序都是这样干的。
#22
顶21楼的意见,还是用“处理中,请稍候”这样的字较好
#23
同意,同时也感谢,8013,老马,泰山,东方之珠等人,谢谢你们无私的奉献!结贴中……