[英]Range.Copy (using Named Ranges) returns Formulas instead of Values
我正在嘗試提高我的幾個報告表單的性能,這需要幾(5 到 10)秒才能完成加載信息(這比之前的 15 到 20 秒有所下降)。 在進行研究時,我發現多個線程討論了使用Range.Copy
讀取和寫入一行范圍的處理時間優勢。
Time Factor
外完美運行,如下所示:
'Begin loading wsCost5Yr Worksheet For frmYr = sYear To wbCurYear Debug.Print locID, frmYr wsSum.Cells(3, "Q") = frmYr 'Cell Q3 of the Summary Worksheet chartYrsCost.Cells(1, uClmn) = frmYr For uRow = 1 To 12 'Get Gas Cost Values costG = sumCostG.Cells(uRow, 1).Value2 'Get Electric cost costE = sumCostE.Cells(uRow, 1).Value2 Debug.Print costG, costE 'Convert Zero Values to Null If Not costE = 0 Then cmp5YrCostEdata.Cells(uRow, uClmn) = costE Else cmp5YrCostEdata.Cells(uRow, uClmn) = vbNullString End If If Not costG = 0 Then cmp5YrCostGdata.Cells(uRow, uClmn) = costG Else cmp5YrCostGdata.Cells(uRow, uClmn) = vbNullString End If Next uRow uClmn = uClmn + 1 Next frmYr
在初始化期間正確Declared
和Set
所有范圍。 我嘗試使用Range.Copy
方法實現的新代碼如下:
'Begin loading wsCost5Yr Worksheet For frmYr = sYear To wbCurYear Debug.Print locID, frmYr wsSum.Cells(3, "Q") = frmYr 'Cell Q3 of the Summary Worksheet chartYrsCost.Cells(1, uClmn) = frmYr sumCostG.copy cmp5YrCostGdata.Cells(1, uClmn) sumCostE.copy cmp5YrCostEdata.Cells(1, uClmn) For uRow = 1 To 12 'Get Gas Cost Values costG = cmp5YrCostGdata.Cells(uRow, uClmn).Value2 'Get Electric cost costE = cmp5YrCostEdata.Cells(uRow, uClmn).Value2 Debug.Print costG, costE 'Convert Zero Values to Null If Not costE = 0 Then cmp5YrCostEdata.Cells(uRow, uClmn) = vbNullString If Not costG = 0 Then cmp5YrCostGdata.Cells(uRow, uClmn) = vbNullString Next uRow uClmn = uClmn + 1 Next frmYr
sumCostG
和sumCostE
這兩個范圍都包含執行上述計算的公式,當我查看目標單元格的書面內容時,我發現#REF!
實際單元格內容的錯誤為=IF(A20="",#REF,,SUM(#REF!-A20))
!
Range.Copy
方法的線程,我閱讀的越多,我變得越困惑。
我確定這是我想念的簡單事情嗎?
有人可以幫我解決這個問題嗎?
預先感謝您的協助。
改變這個:
sumCostG.copy cmp5YrCostGdata.Cells(1, uClmn)
sumCostE.copy cmp5YrCostEdata.Cells(1, uClmn)
對此:
sumCostG.copy
cmp5YrCostGdata.Cells(1, uClmn).PasteSpecial xlPasteValues
sumCostE.copy
cmp5YrCostEdata.Cells(1, uClmn).PasteSpecial xlPasteValues
另一種選擇是destination.value = source.value
:
cmp5YrCostGdata.Cells(1, uClmn).Resize(sumCostG.Rows.Count-1,sumCostG.Columns.Count-1).Value = sumCostG.Value
cmp5YrCostEdata.Cells(1, uClmn).Resize(sumCostE.Rows.Count-1,sumCostE.Columns.Count-1).Value = sumCostE.Value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.