使用函数调用循环大范围更新单元格时 Excel 崩溃

问题描述 投票:0回答:1

我有一个循环使用 Visual Studio DLL 更新单元格。这是可行的,但是当我循环较大的(200 个单元格)范围时,Excel 会崩溃。在查找每个不同单元格的两个参数后,将对 dll 函数进行评估。该函数调用速度很慢,但适用于为该范围内的任何单元格提供的所有参数。我可以为 RANGE(N100:W110) 和 RANGE(N110:W119) 运行它,但当我尝试 RANGE(N100:W119) 时它会崩溃。我正在使用 32 位 excel 运行,因为我需要将其提供给同时拥有 32 位和 64 位版本的用户。

这是我的宏:


Sub updatecurves()

Dim curvesheet As Worksheet
Dim My_setcell, c As Range
Dim My_invua, My_uascale, My_uyscale, My_beta, My_sigma, My_KD, My_zD, My_nint, My_nstehfest, My_flag
Dim Neuman72
Dim MyMsg
Set curvesheet = Sheets("neuman72 vs Aq")

Application.ScreenUpdating = False

My_uascale = Application.Evaluate(Names("uascale").Value)
My_uyscale = Application.Evaluate(Names("uyscale").Value)
My_sigma = 0.0001
My_KD = Application.Evaluate(Names("KD").Value)
My_zD = Application.Evaluate(Names("zD").Value)
My_nint = Application.Evaluate(Names("testnint").Value)
My_nstehfest = Application.Evaluate(Names("nstehfest").Value)
My_flag = Application.Evaluate(Names("flag").Value)



For Each c In curvesheet.Range("N100:W110").Cells
 
 My_invua = Cells(c.Row, "A").Value
 My_beta = Cells("2", c.Column)
 Neuman72 = Neuman72ForEXL(My_invua, My_uascale, My_uyscale, My_beta, My_sigma, My_KD, My_zD, My_nint, My_nstehfest, My_flag) + expint(1 / (4 * My_invua))
 c.Value = Neuman72
 
Next

Application.ScreenUpdating = True

' some comments

End Sub

excel vba memory dll
1个回答
0
投票

好的 - 谢谢@foxfire-and-burns-and-burns。我确信问题出在 excel 上,他们指出我应该看看我的 dll。这是子函数中的内存泄漏,该子函数被调用了很多次(>十亿次),最终耗尽了可用资源并崩溃: ''' v = 新的双[n]; //分配数组长度n ''' 需要的 ''' 删除[] v; '''

© www.soinside.com 2019 - 2024. All rights reserved.