簡體   English   中英

Range.Copy(使用命名范圍)返回公式而不是值

[英]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

在初始化期間正確DeclaredSet所有范圍。 我嘗試使用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

sumCostGsumCostE這兩個范圍都包含執行上述計算的公式,當我查看目標單元格的書面內容時,我發現#REF! 實際單元格內容的錯誤為=IF(A20="",#REF,,SUM(#REF!-A20))

我已經閱讀了 20 多個處理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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM