ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: luckberry

[原创] VBA动态生成多选框checkbox

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2019-5-31 14:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:控件
留个脚印   

TA的精华主题

TA的得分主题

发表于 2019-7-3 17:35 | 显示全部楼层
优秀作品,谢谢!

TA的精华主题

TA的得分主题

发表于 2020-3-22 18:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 233437599 于 2020-3-23 13:05 编辑

如果添加到第25个到28个选项的时候,就会只显示前20个噢..添加到第29个开始往后继续添加又正常了..

求搞手解决哦...

我也遇到这个问题了

TA的精华主题

TA的得分主题

发表于 2020-3-23 13:04 | 显示全部楼层
小霞_JISUXIA 发表于 2015-11-24 16:46
学习了,先用了,慢慢学。。。

其中有一个问题:我在用的时候,发现如果SHEET3的A列行数/10如果大于0.5 ...

按您的改了 还是没解决这个问题

TA的精华主题

TA的得分主题

发表于 2020-6-19 18:23 | 显示全部楼层
作者的代码有错误,sheet3如果有二十多行就不显示了,其实就是一个判断出了错。

Private Sub UserForm_Initialize()
'先计算有多少个控件,每10个换列
If Sheet3.Range("A2").End(xlDown).Row / 10 > Round(Sheet3.Range("A2").End(xlDown).Row / 10, 0) Then
    counts = Round(Sheet3.Range("A2").End(xlDown).Row / 10, 0) + 1
Else
     counts = Round(Sheet3.Range("A2").End(xlDown).Row / 10, 0)
End If

TA的精华主题

TA的得分主题

发表于 2020-6-19 20:05 | 显示全部楼层
本帖最后由 YZC51 于 2020-6-19 21:37 编辑
赟宝赟儿 发表于 2020-6-19 18:23
作者的代码有错误,sheet3如果有二十多行就不显示了,其实就是一个判断出了错。

Private Sub UserForm_I ...

试试
     counts = -Int(-Sheet3.Range("A2").End(xlDown).Row / 10)

TA的精华主题

TA的得分主题

发表于 2020-6-19 20:39 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-6-19 20:43 | 显示全部楼层
代码
  1. Private Sub UserForm_Initialize()
  2.                                     '先计算有多少个控件,每10个换列
  3.     counts = -Int(-Sheet3.Range("A2").End(xlDown).Row / 10)
  4.                                     '设置窗体高度和宽度
  5.     UserForm1.Width = 150 * counts  '每增加1列宽度加150。没有判断是否会超过屏幕的宽度,
  6.                                     '如果数据量太多可以调整每列显示的个数
  7.     UserForm1.Height = 260
  8.     CommandButton1.Width = 150 * counts - 15
  9.     For X = 1 To counts
  10.         Y = 10 * X                  '每列显示10个控件
  11.         If X = 1 Then               '开始第1列显示
  12.             Start = 2
  13.             Ends = 11
  14.         Else                        '换列显示
  15.             Start = Ends + 1
  16.             Ends = Y + 1
  17.         End If
  18.         If Ends > Sheet3.Range("A2").End(xlDown).Row Then '防止溢出
  19.         Ends = Sheet3.Range("A2").End(xlDown).Row
  20.         End If
  21.         For I = Start To Ends       '循环生成控件
  22.             Set ChkBox = UserForm1.Controls.Add("Forms.CheckBox.1", "Chk" & Str(I))
  23.             If I > 11 Then
  24.                 tops = 2 + 20 * (I - Y + 8) '换列后的控件高度坐标
  25.             Else
  26.                 tops = 2 + 20 * (I - 2)
  27.             End If
  28.             ChkBox.Top = tops
  29.             ChkBox.Height = 25      '控件的高度
  30.             ChkBox.Width = 200      '控件的宽度
  31.             ChkBox.Left = 20 + 150 * (X - 1) '220 换列后的横坐标
  32.             ChkBox.Caption = Sheet3.Cells(I, 1) '控件显示的标题
  33.             Set ChkBox = Nothing
  34.         Next
  35.     Next
  36. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-6-19 20:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-6-19 22:27 | 显示全部楼层
优化下
  1. Private Sub UserForm_Initialize()
  2.     myr = Sheet3.Range("A2").End(xlDown).Row
  3.     arr = Sheet3.Range("A2:A" & myr).Value
  4.     counts = -Int(-UBound(arr) / 10)   '先计算有多少个控件,每10个换列
  5.                                         '设置窗体高度和宽度
  6.     UserForm1.Width = 150 * counts      '每增加1列宽度加150。没有判断是否会超过屏幕的宽度,
  7.                                         '如果数据量太多可以调整每列显示的个数
  8.     UserForm1.Height = 260
  9.     CommandButton1.Width = 150 * counts - 15
  10.     For X = 1 To counts
  11.         y = 10 * X - 9                  '每列显示10个控件
  12.         Start = y
  13.         Ends = y + 9
  14.         If Ends > UBound(arr) Then Ends = UBound(arr)
  15.         For I = Start To Ends           '循环生成控件
  16.             Set ChkBox = Me.Controls.Add("Forms.CheckBox.1", "Chk" & Str(I))
  17.             tops = 20 * (I - y)
  18.             ChkBox.Top = tops
  19.             ChkBox.Height = 25          '控件的高度
  20.             ChkBox.Width = 200          '控件的宽度
  21.             ChkBox.Left = 20 + 150 * (X - 1) '220 换列后的横坐标
  22.             ChkBox.Caption = arr(I, 1)  '控件显示的标题
  23.             Set ChkBox = Nothing
  24.         Next
  25.     Next
  26. End Sub
复制代码

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-11 16:19 , Processed in 0.039647 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表