源码结构基本如下,For iTemp = 0 To 4
  arrWRec(iTemp).prop = WINDOW_INDEX
    
  iParams = 5 
  lData = 3001 
       
   '计算
  For iTemp1 = 0 To lData 
    For iTemp2 = 0 To iParams
      strstatement = arrWRec(iTemp).arrParam(iTemp2).strstatement       svalue = EF(strstatement)
        
      arrWRec(iTemp).arrData(iTemp2, iTemp1) = svalue
      arrWRec(iTemp).arrParam(iTemp2).svalue = svalue
      
    Next
  Next
NextPrivate Function EF(ByVal expr As String) As Single
  firstpos = InStr(1, expr, "(")
  lexpr = LCase(left(expr, firstpos - 1))
  Select Case lexpr
  Case "sum"
    secondpos = InStr(firstpos, expr, ",")
    strParam1 = Mid(expr, firstpos + 1, secondpos - firstpos - 1)
    thirdpos = InStr(secondpos + 1, expr, ")")
    strParam2 = Mid(expr, firstpos + 1, secondpos - firstpos - 1)
    EF = innerSUM(strParam1, strParam2)
    
  Case "if"
    secondpos = InStr(firstpos, expr, ",")
    strParam1 = Mid(expr, firstpos + 1, secondpos - firstpos - 1)
    thirdpos = InStr(secondpos + 1, expr, ",")
    strParam2 = Mid(expr, secondpos + 1, thirdpos - secondpos - 1)
    forthpos = InStr(thirdpos + 1, expr, ")")
    strParam3 = Mid(expr, thirdpos + 1, forthpos - thirdpos - 1)
    
    EF = innerIF(strParam1, strParam2, strParam3)
  End Select
  
End FunctioninnerSUM,innerIF内部还没写哪,就感觉慢了.

解决方案 »

  1.   

    原则是:循环次数越多的要放在最里边。所以可改为:for i = 1 to 4
        for k = 1 to 8
          for j = 1 to 3000 
            select case ?
              execute "function"
            end select
          next
        next
    next
      

  2.   

    循环次数是:960000.5 秒钟就完成,升级啊,CPU另外,循环中应该加入: DoEvents
      

  3.   

    已经P4了,还往哪升?
    如果0.5 秒钟就完成,就无须DoEvents了.
      

  4.   

    1)不做重复的事情,把重复的放到循环的外面
    2)循环的次数越多,越放在最里面。
    3)次数较少的循环可以用复制、粘贴代码代替
    比如for i=1 to 2
          for j = i * 10 to i * 20
          ...
          next j
        next i
    改为
          for j = 10 to 40
          ...
          next j