ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] listbox在下一单元格未能正确显示加载的数据!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-4-24 11:58 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ndt3 于 2023-5-4 13:24 编辑

各位老师,序列5 使用双击listbox输入数据时,自动转到下一列单元格,展开下一列单元格的备选项listbox  正常

现在改为序列5 单击listbox输入数据时,自动转到下一列单元格,展开下一列单元格的备选项listbox  不能显示备选项,设置断点后,发现listbox实际上加载了数据,但就是不显示数据.listbox正常显示.
详情请参阅附件!
反复查找,测试,都找不到原因到底出在那里,只好求助各位老师,烦劳各位老师了.

谢谢各位老师!!!



测试代码,有bug,需要先运行一下模块8中的代码,否则报错!


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim csj, csj2, ss, szh
'这里为打开选项的控制程序

dql = Target.Column
dqh = Target.Row


If dqh <= 2 Or dqh > 302 Or Target.Count <> 1 Or Cells(2, dql).Value = "" Then Exit Sub '不在区域内\选区不为1\表头为空白则退出
If Target.Value <> "" Then TextBox1.Text = Target.Value
If Target.Value = "" Then TextBox1.Text = ""
If scdl = "" Then Call szbl '当公共变量中设置变量为空白时,则表示代码中段过,有异常,则重新启动一次变量设置

    ListBox1.Clear '需要清空一下控件,否则会自动输入上次的选择内容
   ' TextBox1 = ""
      ' ListBox1.Visible = False
        
      ' TextBox1.Visible = False


'dygyz = Target.Value '用于判断单元格原值是否改变
        szh = ActiveWorkbook.ActiveSheet.Cells(1, 16).Value '字号设置单元格
        
        lkd = Target.Width * 20 / 10 * 2 '总列宽
               
        lgd = Target.Height * 20 / 6 * 3



      
Dim TF As Boolean


  If InStr(1, "序列1,序列2,序列3,序列4", Cells(2, dql).Value, vbTextCompare) > 0 Then '判断多列状况

       dls = 900: ls = 4

       Else
          dls = ""
          ls = 1

   End If

If InStr(1, scdl, Cells(2, dql).Value, vbTextCompare) > 0 Then
   If TF Then
         
       ListBox1.Visible = False
        
       TextBox1.Visible = False
            
   Else
      
   
         With Me.TextBox1
               
                .Top = Target.Top        '顶点位置
               
                .Left = Target.Left      '左边距
               
                .Width = Target.Width '+ dls  '宽度
               
                .Height = Target.Height  '高度
               
                 .Activate
               
                .Visible = True
               
      End With

      With ListBox1
      
         .ColumnHeads = False '去掉表头
               
         .ColumnCount = ls  '列表框显示列数
               
        If dls <> "" Then
        .Width = dls     '总列宽
         .ColumnWidths = "150;" & 150 & ";" & 100 & ";" & 200 ' & ";" & 200 '& ";" & 100   '每列宽度
        Else
       .Width = lkd     '总列宽
        .ColumnWidths = lkd
    End If
               
         .ListStyle = fmListStylePlain
        
        .Visible = True
               
        .Top = Target.Top
               
        .Left = Target.Left + Target.Width
               
        '
        
               
        .Height = lgd
        .Font.Size = 20
        .MultiSelect = 0
       ' .Clear
         End With
End If
End If
        Dim arr
        
  If InStr(1, scdl, Cells(2, dql).Value, vbTextCompare) > 0 And Cells(2, dql).Value <> "" Then
  
     csj = Sheets("信息表").Rows("1:1").Find(Cells(2, dql), , , 1, , xlPrevious).Column
  
        arr = Sheets("信息表").Range(Sheets("信息表").Cells(1, csj), Sheets("信息表").Cells(Sheets("信息表").Cells(2000, csj).End(xlUp).Row, csj))
        
        
        Else
        End If
        


'Application.ScreenUpdating = False
'看看不能刷新是不是,屏幕刷新或者事件响应未打开,不能排除故障
Application.ScreenUpdating = True
Application.EnableEvents = True
' ListBox1.Enabled
      
        
        ListBox1.Visible = True
        Me.ListBox1.Clear
         ListBox1.List() = arr '这里测试,单击输入后,实际数据已经加载,但listbox1显示是空的!!!!
         ' TextBox1.Value = "1"
               ' ListBox2.List = ListBox1.List'加载另外一个listbox能正常显示数据,但listbox1自动跳下一列后,不能显示.打开事件触发,重新模拟点击单元格触发也不行,只能第一次运行正常,单击listbox输入后,到下一列就不能正常显示
               ' ListBox2.Width = ListBox1.Width
                ' ListBox2.Top = ListBox1.Top
                 
                 

        
       aa = ListBox1.ListCount '测试实际上数据时加载到listbox里了,但未能正常显示
     
      TextBox1.Value = ""
  

Application.ScreenUpdating = True

End Sub
貌似listbox有bug,数据加载了,不能显示出来.


测试纯净情况下打开.zip

119.2 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2023-4-24 13:55 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-24 14:11 | 显示全部楼层

在目标列快速输入规范的数据,信息表存储的是规范的数据.
在清单表中调用listbox输入.序列5 序列6.
按照正常操作,序列5中激活单元格自动打开listbox单击输入选定数据后,进入后面的列(序列6),打开序列6的listbox.但现在序列6列内打开了listbox,加载了数据.但实际listbox不显示数据.
后面一个工作表是使用双击输入的模式,没有问题,使用listbox双击输入数据后进入下一列,listbox会自动加载和显示正确的备选选项.

实际上相当于高级点的数据有效性

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-24 20:34 | 显示全部楼层
自己顶一下先,折腾一周了,找不出原因
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 07:36 , Processed in 0.035508 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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