MICROSOFT

EP08. “Controls Collection 用名字动态引用控件”

首页 Microsoft 工具 Excel · VBA · Userform · EP08
约 4 分钟· #EP08#Excel#Userform
🔒 登录后可标记已读
  • 延续 EP07 遍历控件的概念,讲怎么用字符串拼接的方式动态引用一批「名字有规律」的控件(例如 TextBox1、TextBox2……)
  • 批量把工作表数据填进对应的文本框
  • 也讲 vbModeless 怎么让表单跟工作表同时互动
  • 前置知识:EP07 的 Controls 集合、字符串拼接

重点内容


适用版本

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


用 vbModeless 打开表单

Private Sub CommandButton1_Click()
  UserForm1.Show vbModeless
End Sub

📌 vbModeless 让表单打开后,工作表本身仍然可以点击操作,不会被表单挡住无法互动(默认是 Modal,工作表会被锁住)。


打开方式工作表能否同时操作适合场景
UserForm1.Show(默认 Modal)不能,表单没关闭前工作表被锁住需要使用者先填完/确认表单再继续
UserForm1.Show vbModeless可以,表单和工作表可以同时互动表单要边看工作表边操作,例如本篇批量填充文本框

批量填充文本框

Private Sub CommandButton1_Click()
  Dim i As Integer
  For i = 1 To 10
    Controls("TextBox" & i).Value = Cells(i + 1, 1).Value
  Next i
End Sub

逻辑说明

  • Controls("TextBox" & i):用字符串拼接的方式,动态组出 "TextBox1"、"TextBox2"……"TextBox10" 这些控件名称,逐一引用
  • 只要控件命名有规律(数字编号连续),就能用一个循环处理十个控件,不用写十行几乎一样的代码

[截图:以 vbModeless 打开的表单同时停留在画面上,10 个文本框已经被工作表数据批量填满,背后的工作表仍然可以点击操作]


学完你会

  • ✅ 用字符串拼接 "TextBox" & i 动态组出控件名称,批量引用
  • ✅ 分辨 Modal 和 vbModeless 打开方式的差异
  • ✅ 知道这个方法要求控件命名有规律(连续编号),命名不规律就用不了

常见错误

  • 控件命名没有规律(比如中间跳号或用了不同前缀),字符串拼接组不出正确的控件名称,引用失败
  • 忘记加 vbModeless,表单打开后没办法同时操作工作表
  • 循环次数(本例是 10)跟实际控件数量对不上,多出或少了要处理的文本框

Sources

Blog / Website:

  1. Controls Collection