ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA窗体学习笔记一:Listview控件

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-8-30 15:21 | 显示全部楼层
本帖最后由 tanglf188 于 2023-8-30 15:25 编辑
wj821123 发表于 2023-8-30 15:15
大佬,我的怎么出现这个情况:


应该是你每修改一列行就+1了,最好是传上代码才能看明白


添加ListItems(项目列表)。
        使用SubItems数组添加数据,注意:SubItems(1)为第二列,第一列为Text。添加数据时,首先要添加一ListItems是行对象的集合,然后使用循环,
        把单元格数值赋值给Subitem。Set ITM = ListView1.ListItems.Add(),相当于ListView末尾添加一空行。
            例:以Sheet1表C:J列(共8列)为例
        For i = 1 To UBound(brr)
            Set itm = Me.ListView1.ListItems.Add()
            itm.Text = brr(i, 1)
            For j = 2 To UBound(brr, 2)
                itm.SubItems(j - 1) = brr(i, j)
            Next
        Next

TA的精华主题

TA的得分主题

发表于 2023-8-30 15:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
tanglf188 发表于 2023-8-30 15:21
应该是你每修改一列行就+1了,最好是传上代码才能看明白

Dim I, K As Integer
Dim ARR
ReDim ARR(1 To 1000, 4)
Dim ITM As ListItem
I = 1
For j = 1 To Worksheets("生产预定").Range("C65535").End(3).Row
    If Worksheets("生产预定").Cells(j, 6) = Cells(1, ActiveCell.Column) Then
        ARR(I, 1) = Worksheets("生产预定").Cells(j, 1)
        ARR(I, 2) = Worksheets("生产预定").Cells(j, 3)
        ARR(I, 3) = Worksheets("生产预定").Cells(j, 4)
        ARR(I, 4) = Worksheets("生产预定").Cells(j, 5)
        I = I + 1
    End If
Next j
lv1.ColumnHeaders.Clear
lv1.ListItems.Clear
With lv1
    .Gridlines = True '显示网格线
    .FullRowSelect = True '整行选择
    '.MultiSelect = True '多选
    .LabelEdit = lvwManual '第一列手动修改。不然点两下鼠标就进入编辑状态
    '.CheckBoxes = True '显示复选框
    .View = lvwReport '报表视图
    .Font.Size = 12 '设置字号为四号
    .ColumnHeaders.Add , , "ST_DATE", lv1.Width / 5 '添加标题,并设置宽度为 100。
    .ColumnHeaders.Add , , "生产批号", lv1.Width / 4
    .ColumnHeaders.Add , , "型号", lv1.Width / 4
    .ColumnHeaders.Add , , "工单号", lv1.Width / 4
End With
For j = 1 To I - 1
    lv1.ListItems.Add.Text = ARR(j, 1)
    lv1.ListItems.Add.SubItems(1) = ARR(j, 2)
    lv1.ListItems.Add.SubItems(2) = ARR(j, 3)
    lv1.ListItems.Add.SubItems(3) = ARR(j, 4)
Next j

TA的精华主题

TA的得分主题

发表于 2023-8-30 15:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Dim I, K As Integer
Dim ARR
ReDim ARR(1 To 1000, 4)
Dim ITM As ListItem
I = 1
For j = 1 To Worksheets("生产预定").Range("C65535").End(3).Row
    If Worksheets("生产预定").Cells(j, 6) = Cells(1, ActiveCell.Column) Then
        ARR(I, 1) = Worksheets("生产预定").Cells(j, 1)
        ARR(I, 2) = Worksheets("生产预定").Cells(j, 3)
        ARR(I, 3) = Worksheets("生产预定").Cells(j, 4)
        ARR(I, 4) = Worksheets("生产预定").Cells(j, 5)
        I = I + 1
    End If
Next j
lv1.ColumnHeaders.Clear
lv1.ListItems.Clear
With lv1
    .Gridlines = True '显示网格线
    .FullRowSelect = True '整行选择
    '.MultiSelect = True '多选
    .LabelEdit = lvwManual '第一列手动修改。不然点两下鼠标就进入编辑状态
    '.CheckBoxes = True '显示复选框
    .View = lvwReport '报表视图
    .Font.Size = 12 '设置字号为四号
    .ColumnHeaders.Add , , "ST_DATE", lv1.Width / 5 '添加标题,并设置宽度为 100。
    .ColumnHeaders.Add , , "生产批号", lv1.Width / 4
    .ColumnHeaders.Add , , "型号", lv1.Width / 4
    .ColumnHeaders.Add , , "工单号", lv1.Width / 4
End With
For j = 1 To I - 1
    lv1.ListItems.Add.Text = ARR(j, 1)
    lv1.ListItems.Add.SubItems(1) = ARR(j, 2)
    lv1.ListItems.Add.SubItems(2) = ARR(j, 3)
    lv1.ListItems.Add.SubItems(3) = ARR(j, 4)
Next j

TA的精华主题

TA的得分主题

发表于 2023-8-30 15:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
tanglf188 发表于 2023-8-30 15:21
应该是你每修改一列行就+1了,最好是传上代码才能看明白

写的代码是这样的:
Dim I, K As Integer
Dim ARR
ReDim ARR(1 To 1000, 4)
Dim ITM As ListItem
I = 1
For j = 1 To Worksheets("生产预定").Range("C65535").End(3).Row
    If Worksheets("生产预定").Cells(j, 6) = Cells(1, ActiveCell.Column) Then
        ARR(I, 1) = Worksheets("生产预定").Cells(j, 1)
        ARR(I, 2) = Worksheets("生产预定").Cells(j, 3)
        ARR(I, 3) = Worksheets("生产预定").Cells(j, 4)
        ARR(I, 4) = Worksheets("生产预定").Cells(j, 5)
        I = I + 1
    End If
Next j
lv1.ColumnHeaders.Clear
lv1.ListItems.Clear
With lv1
    .Gridlines = True '显示网格线
    .FullRowSelect = True '整行选择
    '.MultiSelect = True '多选
    .LabelEdit = lvwManual '第一列手动修改。不然点两下鼠标就进入编辑状态
    '.CheckBoxes = True '显示复选框
    .View = lvwReport '报表视图
    .Font.Size = 12 '设置字号为四号
    .ColumnHeaders.Add , , "ST_DATE", lv1.Width / 5 '添加标题,并设置宽度为 100。
    .ColumnHeaders.Add , , "生产批号", lv1.Width / 4
    .ColumnHeaders.Add , , "型号", lv1.Width / 4
    .ColumnHeaders.Add , , "工单号", lv1.Width / 4
End With
For j = 1 To I - 1
    lv1.ListItems.Add.Text = ARR(j, 1)
    lv1.ListItems.Add.SubItems(1) = ARR(j, 2)
    lv1.ListItems.Add.SubItems(2) = ARR(j, 3)
    lv1.ListItems.Add.SubItems(3) = ARR(j, 4)
Next j

TA的精华主题

TA的得分主题

发表于 2023-8-30 15:48 | 显示全部楼层
Private Sub UserForm_Activate()
Dim I, K As Integer
Dim ARR
ReDim ARR(1 To 1000, 4)
Dim ITM As ListItem
I = 1
For j = 1 To Worksheets("生产预定").Range("C65535").End(3).Row
    If Worksheets("生产预定").Cells(j, 6) = Cells(1, ActiveCell.Column) Then
        ARR(I, 1) = Worksheets("生产预定").Cells(j, 1)
        ARR(I, 2) = Worksheets("生产预定").Cells(j, 3)
        ARR(I, 3) = Worksheets("生产预定").Cells(j, 4)
        ARR(I, 4) = Worksheets("生产预定").Cells(j, 5)
        I = I + 1
    End If
Next j
lv1.ColumnHeaders.Clear
lv1.ListItems.Clear
With lv1
    .Gridlines = True '显示网格线
    .FullRowSelect = True '整行选择
    '.MultiSelect = True '多选
    .LabelEdit = lvwManual '第一列手动修改。不然点两下鼠标就进入编辑状态
    '.CheckBoxes = True '显示复选框
    .View = lvwReport '报表视图
    .Font.Size = 12 '设置字号为四号
    .ColumnHeaders.Add , , "ST_DATE", lv1.Width / 5 '添加标题,并设置宽度为 100。
    .ColumnHeaders.Add , , "生产批号", lv1.Width / 4
    .ColumnHeaders.Add , , "型号", lv1.Width / 4
    .ColumnHeaders.Add , , "工单号", lv1.Width / 4
End With
For j = 1 To I - 1
    lv1.ListItems.Add.Text = ARR(j, 1)
    lv1.ListItems.Add.SubItems(1) = ARR(j, 2)
    lv1.ListItems.Add.SubItems(2) = ARR(j, 3)
    lv1.ListItems.Add.SubItems(3) = ARR(j, 4)
Next j
End Sub
以上我写的代码,请帮忙看看

TA的精华主题

TA的得分主题

发表于 2023-10-17 14:55 | 显示全部楼层
工具箱附加菜单里面找不到listview。

TA的精华主题

TA的得分主题

发表于 2023-10-17 16:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
    谢谢分享

TA的精华主题

TA的得分主题

发表于 2023-12-27 21:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
fanyoulin 发表于 2023-4-12 12:14
个人觉得意义不大:
1、可以直接在工作表单中获得查询结果;
2、窗体视野小,翻页也不方面,便利性跟工作 ...

有没有一种可能,窗体可以把很多工作表的某部分你需要的信息集结在一界面,这就是优势,你没用过不代表一切

TA的精华主题

TA的得分主题

发表于 2024-1-24 11:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
For j = 1 To I - 1
    lv1.ListItems.Add.Text = ARR(j, 1)
    lv1.ListItems.Add.SubItems(1) = ARR(j, 2)
    lv1.ListItems.Add.SubItems(2) = ARR(j, 3)
    lv1.ListItems.Add.SubItems(3) = ARR(j, 4)
Next j
这段代码自动全是用的ADD只能第一次用ADD后面的不能用了就只能lv1.listitems.subitems(1) = arr(j,2)这样就不跳了

TA的精华主题

TA的得分主题

发表于 2024-5-17 19:41 | 显示全部楼层
楼上说得对,将
For j = 1 To I - 1
    lv1.ListItems.Add.Text = ARR(j, 1)
    lv1.ListItems.Add.SubItems(1) = ARR(j, 2)
    lv1.ListItems.Add.SubItems(2) = ARR(j, 3)
    lv1.ListItems.Add.SubItems(3) = ARR(j, 4)
Next j
改为
For j = 1 To I - 1
    lv1.ListItems.Add.Text = ARR(j, 1)
    lv1.ListItems.SubItems(1) = ARR(j, 2)
    lv1.ListItems.SubItems(2) = ARR(j, 3)
    lv1.ListItems.SubItems(3) = ARR(j, 4)
Next j
即可
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 07:32 , Processed in 0.046700 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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