MICROSOFT

EP07. “Loop through Controls 循环遍历表单控件”

首页 Microsoft 工具 Excel · VBA · Userform · EP07
约 3 分钟· #EP07#Excel#Userform
🔒 登录后可标记已读
  • 表单上控件很多时(比如一堆复选框),不用一个个写代码单独处理
  • 可以用循环走过 Controls 集合、搭配 TypeName 筛选出想要的控件类型统一处理
  • 用「一键清空所有复选框」当例子
  • 前置知识:For Each 循环

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


打开表单

Private Sub CommandButton1_Click()
  UserForm1.Show
End Sub

Clear 按钮:清空所有复选框

Private Sub CommandButton1_Click()
  Dim contr As Control
  For Each contr In UserForm1.Controls
    If TypeName(contr) = "CheckBox" Then
      contr.Value = False
    End If
  Next
End Sub

逻辑说明

  • For Each contr In UserForm1.Controls:走过表单上所有控件,不管是文本框、按钮还是复选框
  • TypeName(contr) = "CheckBox":用 TypeName 函数判断这个控件是不是复选框类型,只处理符合条件的
  • 符合条件的就把 Value 设成 False,达到「一次清空所有复选框」的效果

[截图:表单上原本勾选了好几个复选框,点击 Clear 按钮后全部变回未勾选状态的前后对比]


学完你会

  • ✅ 用 For Each...In UserForm1.Controls 走过表单上所有控件
  • ✅ 用 TypeName 筛选出特定类型的控件(例如只处理 CheckBox)
  • ✅ 用这个方法批量处理一批同类型控件,不用逐个手写重复代码

常见错误

  • 没有用 TypeName 过滤,直接对所有控件设置 Value = False,结果连不该动的控件(比如文本框)也被清空或报错
  • TypeName 判断的字符串拼写错误(大小写其实不影响,但拼错字母就永远匹配不到)
  • 表单控件很多时忘记这个方法能批量处理,一个个手写重复的代码

Sources

Blog / Website:

  1. Loop through Controls