Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5326|回复: 19

[已解决]为什么Listbox1里没显示最后1条记录?

[复制链接]
发表于 2016-11-16 20:46 | 显示全部楼层 |阅读模式
wff22g.gif
11模糊输入.zip (24.88 KB, 下载次数: 15)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2016-11-16 20:54 | 显示全部楼层
Private Sub TextBox1_Change()
    s = TextBox1.Text
    arr = [a1].CurrentRegion
    ReDim brr(UBound(arr), 1 To 3) '第1维下界改为 0
    For i = 1 To UBound(arr)
        If InStr(1, arr(i, 1), s) > 0 Then
            brr(k, 1) = arr(i, 1)
            brr(k, 2) = arr(i, 2)
            brr(k, 3) = arr(i, 3)
            k = k + 1 '改为 赋值后才累加
        End If
    Next
    ListBox1.List = brr
End Sub


这么改了后,好像没再发生这种现象了。
但我还是没想明白

回复

使用道具 举报

 楼主| 发表于 2016-11-16 21:16 | 显示全部楼层
QQ截图20161116211353.jpg
3.rar (13.15 KB, 下载次数: 8)
回复

使用道具 举报

 楼主| 发表于 2016-11-16 21:19 | 显示全部楼层
Private Sub TextBox1_Change()
    arr = [a1].CurrentRegion
    ListBox1.List = arr
End Sub


这样测试,1楼仍然无法显示最后1行。

为什么呢 。。。。。。。。。。。{:031:}

回复

使用道具 举报

 楼主| 发表于 2016-11-16 21:32 | 显示全部楼层
刚才发现切换到设计模式,手动调整listbox1 的高后,4楼代码便可显示最后1行。


对此,能否这么认为:
如果listbox1 的高“很不凑巧”时,就“恰好”无法显示最后1行,有些"四舍五入"被舍去的感觉 。
解决方法1:微调一下高的值
解决方法2:往listbox里多录入一行
回复

使用道具 举报

 楼主| 发表于 2016-11-16 22:32 | 显示全部楼层
'刷新控件
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count = 1 Then
        If Target.Column = 6 Then   '可能会改
            With TextBox1
                .Left = Target.Left
                .Top = Target.Top
                .Width = Target.Width
                .Height = Target.Height
                .Activate
                .Value = ""
                .Visible = True
            End With
            With ListBox1
                .Left = Target.Offset(0, 1).Left
                .Top = Target.Top
                .Height = Target.Height * 10
                .Width = 300
                .ColumnCount = 3    '可能会改
                .Visible = True
            End With
        Else
            TextBox1.Visible = False
            ListBox1.Visible = False
        End If
    End If
End Sub

'写入Listbox
Private Sub TextBox1_Change()
    Dim txt, arr, brr, i, j, s
    txt = TextBox1.Text
    arr = [a1].CurrentRegion
    ReDim brr(1 To UBound(arr) + 1, 1 To UBound(arr, 2))    '多创建一行,为避免可能无法显示最后一行
    For i = 1 To UBound(arr)
        If arr(i, 1) Like txt & "*" Then
            s = s + 1
            For j = 1 To UBound(arr, 2)
                brr(s, j) = arr(i, j)
            Next j
        End If
    Next
    ListBox1.List = brr
End Sub

'写入单元格
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Dim i, arr
    With ListBox1
        arr = .List
        For i = 0 To .ListCount
            If .Selected(i) Then Exit For
        Next
        ActiveCell.Resize(1, UBound(arr, 2) + 1) = Application.Index(arr, i + 1, 0)
        .Visible = False
    End With
    TextBox1.Visible = False
End Sub

学习4.rar (26.4 KB, 下载次数: 10)
回复

使用道具 举报

发表于 2016-11-17 09:02 | 显示全部楼层
结果证明,是因为列表框的高度,正好不能显示最后一条数据,而实际上最后一条数据是已经存在列表框中的。
在立即窗口输入:?listbox1.List(27,0)
是能看到最后一行的信息的。
在右边的滚动条拖拉中也是能看到,该滚动条不能拖至最底部,拖到底部了也会自动回弹一点。
而通过调整合适的列表框高度后,又能拖动滚动条看到最后一条记录。
这也证实你的五楼说法是对的。

以前没有注意过这件事。
回复

使用道具 举报

 楼主| 发表于 2016-11-17 09:14 | 显示全部楼层
wp8680 发表于 2016-11-17 09:02
结果证明,是因为列表框的高度,正好不能显示最后一条数据,而实际上最后一条数据是已经存在列表框中的。
...

谢谢 wp8680!

在本地窗口也可看到brr有最后一行的记录。
3楼也证明数组对listbox的赋值方式没问题。
因此,最后才怀疑到 listbox 头上。
回复

使用道具 举报

发表于 2016-11-17 09:46 | 显示全部楼层
疯版的锲而不舍的精神可嘉!
回复

使用道具 举报

 楼主| 发表于 2016-11-17 09:51 | 显示全部楼层
su45 发表于 2016-11-17 09:46
疯版的锲而不舍的精神可嘉!

只是碰巧发现这示例挺好,以后可能会人被问到,

所以想搞明白,以备抢答


回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-5 02:24 , Processed in 0.366334 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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