【发布时间】:2018-07-11 01:58:16
【问题描述】:
以前在 2010 excel 版本(版本 14.0.7165.5000)中运行我的代码时,它在 4 分钟内运行。 (但是,如果我第二次运行它,它就不起作用) 切换到 2013 时,我得到“excel 没有响应”或者它只是 excel 挂起。 该代码从目录中打开一个文件,将它们加载到我的 Excel 工作表中并编译和转换一些数据。
我浏览了代码,似乎已经过了这部分,现在 excel 没有响应我给定的 sub sub ,特别是在这部分,
'write
For i = 1 To WorksheetFunction.Min(nRows, UBound(arr, 1))
For j = 1 To nCols
If fromTop Then writeVal = arr(i, j) Else writeVal = arr(UBound(arr, 1) - i + 1, j)
thisWS.Cells(startRow + i - 1, startCol + j - 1).value = writeVal
Next j
Next i
有人知道这是为什么吗?是否有一些我正在使用的功能在 2010 年有效,但在 2013 年无效?
【问题讨论】:
-
你可以分解代码(断点/什么),看看问题出在哪里。您还可以优化 writeArrToWS 子以在整个工作表范围内调用 ClearContents,并且还可以一键将数组写入工作表
-
@MacroMarc ,当excel表格停止响应时,通常在这一行,
thisCurveDataRow = findInArrCol(curveNameToMarketData(thisCurveMapRow, 2), 2, curveData) -
“停止”是什么意思?它会崩溃、返回错误还是其他?
-
对不起,我的意思是我的 excel 没有响应,我现在刚刚通过它,当我到达
writeArrtoWS子时出现此错误 -
根据代码的大小/复杂性很难知道,而且 Excel 无响应也很难追踪。我要尝试的前两件事是:1)将 generateIRandCRshocks 末尾的块更改为“With ActiveWorkbook.Sheets("IR_CR_Shocks")”块,以及 2),将 writeArrToWS 的“清除”部分更改为循环遍历数组,生成范围对象并在其上使用 .ClearContents 方法。