Day36 - 小型应用系统(1)

今日学习目标

  • 掌握用户窗体设计
  • 实现数据输入验证
  • 完成菜单和工具栏集成

知识点

### 1. 用户窗体设计原则
- 布局清晰:控件对齐、间距一致
- 功能明确:标签提示清晰
- 交互友好:即时反馈、错误提示
### 2. 数据验证技术
- 输入格式验证
- 必填字段检查
- 数值范围验证
- 自定义验证规则
### 3. 界面集成
- 自定义功能区
- 右键菜单扩展
- 快捷键绑定

今日代码

' 主窗体初始化
Private Sub UserForm_Initialize()
    ' 加载部门列表
    Dim deptList As Collection
    Set deptList = GetDepartmentList()

    Dim dept As Variant
    For Each dept In deptList
        Me.cmbDepartment.AddItem dept
    Next dept

    ' 设置默认日期
    Me.txtDate.Value = Format(Date, "yyyy-mm-dd")
End Sub

' 提交按钮事件
Private Sub btnSubmit_Click()
    ' 数据验证
    If Not ValidateInput() Then Exit Sub

    ' 保存数据
    Call SaveData

    MsgBox "保存成功!", vbInformation
    Me.Hide
End Sub

' 数据验证函数
Private Function ValidateInput() As Boolean
    ValidateInput = True

    ' 必填字段验证
    If Trim(Me.txtName.Value) = "" Then
        MsgBox "请输入姓名!", vbExclamation
        Me.txtName.SetFocus
        ValidateInput = False
        Exit Function
    End If

    ' 数值范围验证
    If Not IsNumeric(Me.txtAmount.Value) Then
        MsgBox "金额必须为数字!", vbExclamation
        Me.txtAmount.SetFocus
        ValidateInput = False
        Exit Function
    End If

    If CDbl(Me.txtAmount.Value) <= 0 Then
        MsgBox "金额必须大于0!", vbExclamation
        Me.txtAmount.SetFocus
        ValidateInput = False
        Exit Function
    End If
End Function

' 保存数据
Private Sub SaveData()
    Dim ws As Worksheet
    Dim lastRow As Long

    Set ws = Worksheets("数据")
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1

    ws.Cells(lastRow, 1).Value = Me.txtName.Value
    ws.Cells(lastRow, 2).Value = Me.cmbDepartment.Value
    ws.Cells(lastRow, 3).Value = Me.txtAmount.Value
    ws.Cells(lastRow, 4).Value = CDate(Me.txtDate.Value)
End Sub

练习题

  1. 创建带下拉选择的部门表单
  2. 实现实时输入验证(失去焦点时)
  3. 添加表单重置和取消功能