以前在2010 excel版本(版本14.0.7165.5000)中运行我的代码时,它会在4分钟内运行。 (但是,如果我第二次运行它,它不起作用) 当切换到2013年我得到'excel没有响应'或它只是excel挂起。 代码打开目录中的文件,将它们加载到我的Excel工作表中,然后编译并转换一些数据。
我逐步完成了代码,似乎已经超越了这一部分,现在excel对我的给定子子没有反应,特别是在这部分,
'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年没有?
答案 0 :(得分:1)
这不是一个真正的答案。但是,我不确定代码是否会在评论部分进行格式化。如果有人愿意告诉我将来如何处理这种情况,请告诉我!
无论如何,优秀的家伙,我的意思是:
'clear
startCell.Resize(nRows, nCols).ClearContents
而不是:
'clear
For i = 1 To nRows
For j = 1 To nCols
thisWS.Cells(startRow + i - 1, startCol + j - 1).value = ""
Next j
Next i
OK ...接下来将更改writeArrToWS子,以使用数组一次写入整个范围。我重新编写了sub,并在上面的答案中加入了修改后的更改。我想你想要:
Public Sub writeArrToWS(arr() As Variant, startCell As Range, fromTop As Boolean, nRows As Long, nCols As Long)
Dim i As Long, j As Long, startRow As Long, startCol As Long
Dim thisWS As Worksheet, totalRange As Range
Set thisWS = startCell.Worksheet
'set the write range
Set totalRange = startCell.Resize(nRows, nCols)
'clear
totalRange.ClearContents
'write
If fromTop Then
totalRange.Value2 = arr
Else
Dim reversedArr() As Variant, swappedRow As Long
ReDim reversedArr(1 To nRows, 1 To nCols)
For i = 1 To nRows
swappedRow = nRows - i + 1
For j = 1 To nCols
reversedArr(swappedRow, j) = arr(i, j)
Next j
Next i
totalRange.Value2 = reversedArr
End If
End Sub
一些事情: