今日代码
vbaSub 成绩统计器()
' 使用变量、数组、条件语句、循环
End Sub
Sub 数据填充器()
' 使用Range、循环
End Sub今日任务
综合运用前8天所学知识完成以下练习。这类 VBA 练习项目的意义在于把变量、循环、对象、错误处理串成完整程序。
练习题目
练习1:成绩统计器
创建一个程序,统计学生成绩并评级。提示:数组存分数,循环累加,Select Case 评级。
练习2:数据填充器
自动填充指定范围的单元格数据。提示:Cells(行, 列) 配合循环,表头用 With 批量设置格式。
练习3:工作表处理器
遍历所有工作表并进行批量操作。提示:For Each ws In Worksheets。
参考代码结构
vbaSub 成绩统计器()
' 使用变量、数组、条件语句、循环
End Sub
Sub 数据填充器()
' 使用Range、循环
End Sub成绩统计器的一种完整实现(与 bas 文件一致):
vbaSub 成绩统计器()
Dim scores(1 To 10) As Integer
Dim i As Integer, total As Integer
Dim avg As Double, grade As String
Randomize
For i = 1 To 10
scores(i) = Int(Rnd * 41) + 60 ' 60-100之间
Next i
For i = 1 To 10
total = total + scores(i)
Next i
avg = total / 10
Select Case avg
Case Is >= 90: grade = "优秀"
Case Is >= 70: grade = "中等"
Case Else: grade = "不及格"
End Select
MsgBox "总分: " & total & " 平均分: " & avg & " 评级: " & grade
End Sub练习要求
- 编写完整的代码
- 添加必要的注释
- 添加错误处理
- 测试运行结果
参考解答
1. 成绩统计器:使用数组存储分数,循环计算总分和平均分,用If判断评级。 2. 数据填充器:使用双层循环遍历行列,Cells(row, col).Value赋值。 3. 工作表处理器:For Each ws In Worksheets遍历,对每个工作表执行操作。
实战场景
采购部每月要生成 20 个产品的价格清单,价格随机模拟、表头加粗,写一个小程序一次完成:
vbaSub 生成价格清单()
Dim i As Integer
On Error GoTo ErrorHandler
For i = 1 To 20
Cells(i + 1, 1).Value = i
Cells(i + 1, 2).Value = "产品" & i
Cells(i + 1, 3).Value = Int(Rnd * 1000) + 100
Next i
With Range("A1:C1")
.Value = Array("序号", "产品名称", "价格")
.Font.Bold = True
End With
MsgBox "清单生成完成", vbInformation
Exit Sub
ErrorHandler:
MsgBox "生成失败:" & Err.Description, vbCritical
End Sub这个场景把前 8 天的知识串了起来:循环 + Cells 用变量定位行号(Day04、Day06),With 批量设置表头格式(Day06),On Error GoTo 兜底(Day07)。运行后生成一张带表头的清单,出错时给出明确提示。
常见错误与排查
Compile error: Variable not defined——模块顶部有Option Explicit,新变量没写Dim,补声明即可。Run-time error '6': Overflow——Integer装不下累加结果(上限 32767),求和变量改用Long。Run-time error '11': Division by zero——求平均分时人数变量没赋值还是 0,先检查分母。Array(...)给区域赋值报Run-time error '1004'——数组元素个数与区域大小不一致。Rnd每次运行出同一组数——开头忘写Randomize,随机序列被固定了。
延伸练习
- 给成绩统计器增加最高分、最低分、不及格人数三个指标。
- 把数据填充器改为按
InputBox输入的行数填充,并校验非数字输入。 - 工作表处理器改为:在每张表 A2 写入该表已用区域的行数(
UsedRange.Rows.Count)。
由在线工具箱(www.vba.net)整理制作