是这样的,
我在EXCEL中编写了一个宏,宏的功能是打开硬盘上的一个EXCEL文件,并且对这个文件中的数据
做一些计算,做后关闭打开的EXCEL文件。
问题是这个计算过程特别慢,如果我把要打开的EXCEL文件中的内容直接复制到宏坐在的EXCEL文件中,然后执行相同的代码计算,发现速度很快,前者20秒,而后者不到1秒。
是不是前者是和硬盘交换数据,而后者是和内存交换数据,如果是该如何解决使前者的计算速度加快,如果不是又是怎么回事?如何解决?
---
不知道我说清楚了没有,盼君不吝赐教。
我在EXCEL中编写了一个宏,宏的功能是打开硬盘上的一个EXCEL文件,并且对这个文件中的数据
做一些计算,做后关闭打开的EXCEL文件。
问题是这个计算过程特别慢,如果我把要打开的EXCEL文件中的内容直接复制到宏坐在的EXCEL文件中,然后执行相同的代码计算,发现速度很快,前者20秒,而后者不到1秒。
是不是前者是和硬盘交换数据,而后者是和内存交换数据,如果是该如何解决使前者的计算速度加快,如果不是又是怎么回事?如何解决?
---
不知道我说清楚了没有,盼君不吝赐教。
Private Type Days
FromDay As Date
ToDay As Date
End Type
Private Sub Command1_Click()
Dim DAY1 As Days
Dim MODELS(3) As String
DAY1.FromDay = #9/6/2004#
DAY1.ToDay = #9/7/2004#
MODELS(1) = "LTN141P4-L01-0LB3"
MODELS(2) = "LTN141P4-L02-0LB3"
MODELS(3) = "LTN141P4-L03-0LB3"
Dim xexl As Object
'Dim xBook As Excel.Workbook Dim filename As String
filename = "STEP YIELD(Group,Part)_"
Set xexl = CreateObject("Excel.Application")
''Set xBook = xexl.Workbooks.Open("D:\zzm\vb test\" & filename)
''''
Dim OUT(7), COUT(7), BON(7), SCR(7) As Integer
Dim yield(7), yieldtotal As Double
yieldtotal = 1
'''''
For i = 1 To 7
OUT(i) = 0
COUT(i) = 0
BON(i) = 0
SCR(i) = 0
yield(i) = 1
Next i
''''
For datei = DAY1.FromDay To DAY1.ToDay
'Set xBook = xexl.Workbooks.Open((("C:\Documents and Settings\p3_zm_zhang\桌面\vb test\EXE TEST0\" & filename) & Format(datei)) & ".xls")
xexl.WORKBOOKS.Open ((("C:\Documents and Settings\p3_zm_zhang\桌面\vb test\EXE TEST0\" & filename) & Format(datei)) & ".xls")
'''''xBook.Activate
For J = 1 To 3
'''''''''''''''''''''''''''''''''''''
For Each c In xexl.Worksheets(1).Range("A:A")
If c.Value = MODELS(J) Then
For i = 1 To 7
If i <> 7 Then
OUT(i) = OUT(i) + xexl.Worksheets(1).Range("I" & Format(c.Row + i - 1)).Value
BON(i) = BON(i) + xexl.Worksheets(1).Range("K" & Format(c.Row + i - 1)).Value
SCR(i) = SCR(i) + xexl.Worksheets(1).Range("L" & Format(c.Row + i - 1)).Value
Else
OUT(i) = OUT(i) + xexl.Worksheets(1).Range("I" & Format(c.Row + i)).Value
BON(i) = BON(i) + xexl.Worksheets(1).Range("K" & Format(c.Row + i)).Value
SCR(i) = SCR(i) + xexl.Worksheets(1).Range("L" & Format(c.Row + i)).Value
End If
Next i
Exit For
End If
Next c
'''''''''''''''''''''''''''''''''''''''''''
Next J
xexl.WORKBOOKS((filename & Format(datei)) & ".xls").Close (True)
Next datei
'''''''''''
For i = 1 To 7
If OUT(i) + SCR(i) <> 0 Then
yield(i) = 1 - (SCR(i) - BON(i)) / (OUT(i) + SCR(i))
End If
yieldtotal = yieldtotal * yield(i)
Next i
MsgBox (yieldtotal)
'MsgBox (xBook.Worksheets.Count)
'xBook.Worksheets
''''
''xBook.Close (True)
xexl.QuitEnd Sub
由于VB我不熟,所以一些有问题的代码被我注释掉了,可能会妨碍各位察看,
运行时占用100% CPU资源,运行约需20秒。
各位大虾能帮我解决运算速度问题,小弟不甚感谢。
如果装了norton之类的杀毒软件,每次打开excel时都会花不少时间查宏病毒的;即使没装,打开excel文件也不止1秒
我跟踪了执行过程,打开EXCEL文件很快,不到1秒,绝大部分时间花在搜索上,而且整个执行过程CPU一直占用100%,我想即使打开EXCEL文件也不会长达20秒的时间CPU占用100%吧?
期待答案中,
谢谢各位捧场,很快我就会给分的。
以上提到的只是计算过程的一个步骤,我又许多EXCEL文件,都要通过VB工程进行调用,所以我无法想象最后的运行速度,你的想法显然不适。虽然代码放到宏里面,并且把EXCEL文件里的内容复制到宏所在的文件里,计算速度很快,不到1秒。这也正是我感到奇怪的地方,一样的搜索过程,为什么差距这么大?
感谢seeze()兄的关注。