我只想確保將列內的文本更改為大寫。
為此,我使用以下代碼
Private Sub Worksheet_Activate()
Dim cell As Range
For Each cell In Range("$G$6:$G$200")
cell.Value = UCase(cell.Value)
Next cell
End Sub
在這種情況下,回圈運行了大約 200 個單元,但它已經需要大約 15 秒才能執行。有任何想法嗎?
uj5u.com熱心網友回復:
這會將值復制到一個陣列中,執行 ucase 并將其寫回。通過這種方式,您可以減少對作業表的讀寫訪問次數,這通常會減慢代碼速度,因為每次寫入訪問都可能觸發事件、重新計算或導致螢屏更新。
Private Sub Worksheet_Activate()
On Error GoTo EH
Application.EnableEvents = False
Dim rg As Range
Set rg = Range("$G$6:$G$200")
Dim vdat As Variant
vdat = rg.Value
Dim i As Long, j As Long
For i = LBound(vdat, 1) To UBound(vdat, 1)
For j = LBound(vdat, 2) To UBound(vdat, 2)
vdat(i, j) = UCase(vdat(i, j))
Next
Next
rg.Value = vdat
EH:
Application.EnableEvents = True
End Sub
uj5u.com熱心網友回復:
在單元格之間迭代需要時間。使用陣列并在最后洗掉結果,迭代會快得多,并且在每次迭代中寫入會使代碼變慢。但是Evaluate更緊湊并且具有相似的效率:
Dim rng As Range: Set rng = Range("$G$6:$G$200")
rng.value = Evaluate("Upper(" & rng.Address & ")")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/429849.html
