Day38 - 代码优化(1)
今日学习目标
- 掌握代码重构技术
- 提高代码执行效率
- 改进代码可读性
知识点
### 1. 代码重构原则
- 单一职责:每个过程只做一件事
- DRY原则:避免重复代码
- KISS原则:保持简单直接
### 2. 性能优化技巧
- 减少屏幕更新:Application.ScreenUpdating
- 避免Select/Activate
- 使用数组代替单元格操作
- 合理使用With语句
### 3. 变量和常量管理
- 使用有意义的命名
- 统一变量命名规范
- 使用常量代替硬编码
今日代码
' 优化前:低效的代码
Sub OldProcessData()
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To 10000
Worksheets("Sheet1").Select
Cells(i, 1).Select
Selection.Value = i
Next i
Application.ScreenUpdating = True
End Sub
' 优化后:高效的代码
Sub NewProcessData()
Dim i As Long
Dim ws As Worksheet
Dim dataArr() As Variant
Application.ScreenUpdating = False
Set ws = Worksheets("Sheet1")
' 使用数组批量操作
ReDim dataArr(1 To 10000, 1 To 1)
For i = 1 To 10000
dataArr(i, 1) = i
Next i
' 一次性写入
With ws
.Range(.Cells(1, 1), .Cells(10000, 1)).Value = dataArr
End With
Application.ScreenUpdating = True
MsgBox "处理完成!"
End Sub
' 提取公共函数
Sub UpdateSalesReport()
Dim ws As Worksheet
Set ws = Worksheets("销售")
With ws
Call FormatHeader(.Range("A1:F1"))
Call SetNumberFormat(.Range("D:D"), "#,##0.00")
Call AutoFitColumns(.Range("A:F"))
End With
End Sub
Sub FormatHeader(rng As Range)
With rng
.Font.Bold = True
.Interior.Color = RGB(0, 51, 102)
.Font.Color = RGB(255, 255, 255)
.HorizontalAlignment = xlCenter
End With
End Sub
Sub SetNumberFormat(rng As Range, fmt As String)
rng.NumberFormat = fmt
End Sub
Sub AutoFitColumns(rng As Range)
rng.Columns.AutoFit
End Sub练习题
- 将重复的数据验证代码提取为公共函数
- 使用数组改写单元格循环操作
- 添加错误处理和日志记录