是这样的,
   我在EXCEL中编写了一个宏,宏的功能是打开硬盘上的一个EXCEL文件,并且对这个文件中的数据
做一些计算,做后关闭打开的EXCEL文件。
   问题是这个计算过程特别慢,如果我把要打开的EXCEL文件中的内容直接复制到宏坐在的EXCEL文件中,然后执行相同的代码计算,发现速度很快,前者20秒,而后者不到1秒。
   是不是前者是和硬盘交换数据,而后者是和内存交换数据,如果是该如何解决使前者的计算速度加快,如果不是又是怎么回事?如何解决?
   ---
   不知道我说清楚了没有,盼君不吝赐教。

解决方案 »

  1.   

    或者你把处理代码写到VB6里或.vbs文件里,然后对excel文件处理,这样应该快些
      

  2.   

    '这是我的一段源码,在VB6里运行通过,计算结果正确,但是太慢
    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
      

  3.   

    源码贴出来好像有点乱啊,
    由于VB我不熟,所以一些有问题的代码被我注释掉了,可能会妨碍各位察看,
    运行时占用100% CPU资源,运行约需20秒。
    各位大虾能帮我解决运算速度问题,小弟不甚感谢。
      

  4.   

    问题是这个计算过程特别慢,如果我把要打开的EXCEL文件中的内容直接复制到宏坐在的EXCEL文件中,然后执行相同的代码计算,发现速度很快,前者20秒,而后者不到1秒。——你没算上打开、关闭文件的时间吗?
    如果装了norton之类的杀毒软件,每次打开excel时都会花不少时间查宏病毒的;即使没装,打开excel文件也不止1秒
      

  5.   

    但是seeze() ,
       我跟踪了执行过程,打开EXCEL文件很快,不到1秒,绝大部分时间花在搜索上,而且整个执行过程CPU一直占用100%,我想即使打开EXCEL文件也不会长达20秒的时间CPU占用100%吧?
       期待答案中,
       谢谢各位捧场,很快我就会给分的。
      

  6.   

    我觉得可以把对要处理的excel文件(简称B)进行操作的代码放到B文件里面作为一个宏,A只需要打开B并执行宏就可以了,不知道能不能做到及能否提高速度
      

  7.   

    TO  seeze() ,
      以上提到的只是计算过程的一个步骤,我又许多EXCEL文件,都要通过VB工程进行调用,所以我无法想象最后的运行速度,你的想法显然不适。虽然代码放到宏里面,并且把EXCEL文件里的内容复制到宏所在的文件里,计算速度很快,不到1秒。这也正是我感到奇怪的地方,一样的搜索过程,为什么差距这么大?
      感谢seeze()兄的关注。