xwt620 发表于 2011-10-26 21:33:34

讨论下怎样才能提高Excel的UDF在Ofice2007中的效率

本帖最后由 xwt620 于 2011-10-26 21:35 编辑

公司经常用Excel处理些需要计算方面的文档,有些公式也挺复杂,单纯的用excel内置函数写起来很麻烦,所以就会用外部程序来解决问题(因为偶对VBA不是很熟),那么就会用到_ExcelReadCell和_ExcelWriteCell,以前用2003时效率非常高,感觉就是毫秒级的,但是现在升级到2007后发现效率就非常的差了,读取20-30个数据就需要好几秒钟才能完成,所以就需要修改下Excel的UDF来提高效率。Func _ExcelReadCell($oExcel, $sRangeOrRow, $iColumn = 1)
        If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
        If Not StringRegExp($sRangeOrRow, "", 0) Then
                If $sRangeOrRow < 1 Then Return SetError(2, 0, 0)
                If $iColumn < 1 Then Return SetError(2, 1, 0)
                Return $oExcel.Activesheet.Cells($sRangeOrRow, $iColumn).Value
        Else
                Return $oExcel.Activesheet.Range($sRangeOrRow).Value
        EndIf
EndFunc   ;==>_ExcelReadCellFunc _ExcelWriteCell($oExcel, $sValue, $sRangeOrRow, $iColumn = 1)
        If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
        If Not StringRegExp($sRangeOrRow, "", 0) Then
                If $sRangeOrRow < 1 Then Return SetError(2, 0, 0)
                If $iColumn < 1 Then Return SetError(2, 1, 0)
                $oExcel.Activesheet.Cells($sRangeOrRow, $iColumn).Value = $sValue
                Return 1
        Else
                $oExcel.Activesheet.Range($sRangeOrRow).Value = $sValue
                Return 1
        EndIf
EndFunc   ;==>_ExcelWriteCell

xwt620 发表于 2011-10-26 23:05:59

不知道kevinch 哥有没有好的办法?

gzh888666 发表于 2011-10-26 23:31:00

办法就是换回2003

xwt620 发表于 2011-10-27 00:21:19

我觉得我没有这个能力说服领导去换回2003

xwt620 发表于 2011-10-30 22:44:11

今天想了个办法,明天试试用ObjGet来看看效率怎么样,感觉问题就出在这里。

xwt620 发表于 2011-10-31 20:35:47

看来还只能换回2003才行
2003和2007有什么区别,同样的代码居然效率相差7倍以上
页: [1]
查看完整版本: 讨论下怎样才能提高Excel的UDF在Ofice2007中的效率