【发布时间】:2021-02-23 16:49:50
【问题描述】:
谁能告诉我以下代码是否已针对 Excel VBA 优化并在单元格焦点上正确转换为大写?
有时它会减慢 Excel。有没有更好的版本?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cell As Range
Application.EnableEvents = False
For Each cell In Target
If IsEmpty(cell) Then
ElseIf cell.HasFormula = True Then
cell.Font.Name = "Arial Narrow"
cell.Font.Size = 9
Else
cell = UCase(cell)
cell.Font.Name = "Arial Narrow"
cell.Font.Size = 9
End If
Next
Application.EnableEvents = True
End Sub
【问题讨论】:
-
焦点(选择不同的单元格/范围)或更改(单元格内容已更新)?
Worksheet_change事件不会由公式重新计算引起的更改触发。 -
在每次更改时运行 VBA 肯定会减慢 Excel。最好有一个在保存时运行的格式化宏以一次更正所有内容。
-
永远不要重复相等的分配!将 cell.Font.Name = "Arial Narrow" 放在 For Each cell In Target 之前,不要重复。 cell.Font.Size = 9 也是如此
-
仅供参考,这里的问题不一定是题外话(尽管可以说比典型的更广泛),但标题如“在修改后的单元格中强制大写”,这将是一个很好的问题- 在Code Review 上收到帖子,其中的“问题”具体要求对提交给同行评审的代码的任何/所有方面提供反馈。
-
注意!谢谢大家
标签: excel vba ms-office uppercase