【发布时间】:2017-06-19 23:37:00
【问题描述】:
我认为这没有我做的那么复杂,但作为 VBA 的新手,经过几天的谷歌搜索和使用不同的代码后,我无法找到答案。
我有一个宏:
- 在任何命名的文件夹路径中打开文件
- 在文件中搜索特定文本以查找特定部分的开头,即 A100
- 查找本节的结尾,即 A110(长度因文件而异)
- 将此范围内的单元格复制并粘贴到另一个特定范围内,即 O1:O10
- 为这个新的可变长度范围内的每个单元格填充一个复选框
我现在需要用户单击他们想要的复选框,然后将这些复选框的标题保存为一个数组,然后我可以稍后在宏中调用它。
即如果他们从复选框中单击狗、猫和鸟,输出将是狗、猫、鸟
由于范围和复选框数量的可变长度,我无法弄清楚如何让它遍历每个复选框并连接正确的值。
我认为可能有一种方法可以删除值的复制粘贴以填充用户窗体,但这是我可以在给定范围的可变长度的情况下找出该部分的唯一方法。
以下是在复制粘贴范围后生成用户表单的代码。
Private Sub UserForm_Initialize()
Dim curColumn As Long
Dim i As Long
Dim codeRow As Long
Dim chkBox As msforms.CheckBox
curColumn = 15
codeRow = Range("O20").End(xlUp).Row
For i = 1 To codeRow
Set chkBox = Me.Controls.Add("Forms.CheckBox.1", "CheckBox_" & i)
chkBox.Caption = Worksheets(1).Cells(i, curColumn).Value
chkBox.Left = 5
chkBox.Top = 5 + ((i - 1) * 20)
Next i
End Sub
【问题讨论】:
-
ListBox 控件可以有复选框stackoverflow.com/questions/10944064/…
-
您可以随时迭代
Me.Controls集合并检查控件的类型/名称...但是,绝对的简洁解决方案是列表框,具有以下设计时属性:MultiSelect = 1、ListStyle = 1,并在运行时将RowSource属性设置为您的Range("O1:O" & coderow) -
谢谢!工作完美。将在下面发布更新的代码。
标签: vba excel checkbox userform