ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] ListBox条件赋值

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-3-12 08:43 | 显示全部楼层 |阅读模式
本帖最后由 jinri01 于 2013-3-12 09:42 编辑

需求:鼠标在C3时显示Listbox,并且将A14:Range("b65535").End(xlUp).Row
的数据区中,科目编码前4位数等于C3的科目编码和科目名称值赋给Listbox
会计科目.rar (8.18 KB, 下载次数: 65)


TA的精华主题

TA的得分主题

发表于 2013-3-12 09:28 | 显示全部楼层
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Count > 1 Then Exit Sub
  3. Dim Myr&, Arr, i&, Arr1, j&
  4. If Target.Address = "$C$3" Then
  5.     Myr = [a65536].End(xlUp).Row
  6.     Arr = Range("a15:b" & Myr)
  7.     ReDim Arr1(1 To UBound(Arr), 1 To 2)
  8.     j = j + 1
  9.     Arr1(1, 1) = "科目代码": Arr1(1, 2) = "科目名称"
  10.     For i = 1 To UBound(Arr)
  11.         If Left(Arr(i, 1), 4) = CStr(Target.Value) Then
  12.             j = j + 1
  13.             Arr1(j, 1) = Arr(i, 1): Arr1(j, 2) = Arr(i, 2)
  14.         End If
  15.     Next
  16.     With Me.ListBox1
  17.         .Visible = True
  18.         .Top = [c4].Top
  19.         .Left = [d3].Left
  20.         .ColumnCount = 2
  21.         .ColumnWidths = "60,50"
  22.         .Clear
  23.         .List = Arr1
  24.     End With
  25. Else
  26.     Me.ListBox1.Visible = False
  27. End If
  28. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-3-12 09:24 | 显示全部楼层
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Address = "$C$3" Then
  3.   ListBox1.ColumnCount = 2
  4.   ListBox1.List = Range("a14", [b65535].End(xlUp)).Value
  5. End If
  6. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2013-3-12 09:29 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-3-12 09:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ListBox1.ColumnCount = 2

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-12 09:42 | 显示全部楼层
本帖最后由 jinri01 于 2013-3-12 09:50 编辑
蓝桥玄霜 发表于 2013-3-12 09:28


非常谢谢蓝桥老师。另外,能否做到随着输入数据的变化Listbox实时动态变化显示吗?

TA的精华主题

TA的得分主题

发表于 2013-3-12 09:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
为了实现效果,给你增加了一个textbox
会计科目.rar (15.06 KB, 下载次数: 117)

  1. Option Explicit

  2. '双击listbox,将值赋给textbox以及E3
  3. Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  4.     Dim strT() As String
  5.     If ListBox1.Text <> "" Then strT = Split(ListBox1.Text, "-")
  6.     TextBox1.Text = strT(0)
  7.     Range("E3").Value = strT(1)
  8.    
  9. End Sub

  10. '根据文本框输入的值,自动更改列表框,以供选择
  11. Private Sub TextBox1_Change()
  12.     ListBox1.Clear
  13.     Range("E3").Value = ""
  14.    
  15.     If Trim(TextBox1.Text) = "" Then Exit Sub
  16.    
  17.     Dim lngRows As Long
  18.     Dim intLen As Integer
  19.     Dim strFind As String
  20.     Dim arr
  21.     Dim lngI As Long
  22.    
  23.     lngRows = Range("A65536").End(xlUp).Row
  24.     arr = Range("A15:B" & lngRows)
  25.     strFind = Trim(TextBox1.Text)
  26.     intLen = Len(strFind)
  27.     For lngI = 1 To UBound(arr)
  28.         If Mid(arr(lngI, 1), 1, intLen) = strFind Then
  29.             ListBox1.AddItem arr(lngI, 1) & "-" & arr(lngI, 2)
  30.         End If
  31.     Next
  32.    
  33.     Range("C3").Value = TextBox1.Text
  34.    
  35. End Sub

  36. '当焦点在C3时,显示文本框及列表框
  37. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  38.   ListBox1.Visible = False
  39.   TextBox1.Visible = False
  40.   If Target.Address = "$C$3" Then
  41.     TextBox1.Left = Range("C3").Left
  42.     TextBox1.Top = Range("C3").Top
  43.     TextBox1.Height = Range("C3").Height
  44.     TextBox1.Width = Range("C3").Width
  45.     TextBox1.Text = Range("C3").Value
  46.     TextBox1.Visible = True
  47.     TextBox1.Activate
  48.    
  49.     ListBox1.Visible = True
  50.     ListBox1.Left = Range("C3").Left
  51.     ListBox1.Top = Range("C3").Top + Range("C3").Height
  52.   End If
  53.   
  54. End Sub
复制代码



评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-12 10:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lsdongjh 发表于 2013-3-12 09:59
为了实现效果,给你增加了一个textbox

你好,谢谢你的帮助,请问能否修改下,按ENTER键,把输入文本框的编码赋值给C3,其它功能不变。

TA的精华主题

TA的得分主题

发表于 2013-3-12 11:47 | 显示全部楼层
jinri01 发表于 2013-3-12 10:51
你好,谢谢你的帮助,请问能否修改下,按ENTER键,把输入文本框的编码赋值给C3,其它功能不变。

不需要这个功能吧,已实现了:在文本框中输入时,同步更改C3;在列表框中双击时,同步更改C3

TA的精华主题

TA的得分主题

发表于 2013-3-12 11:50 | 显示全部楼层
有个小Bug,修正了一下

会计科目.rar

15.37 KB, 下载次数: 333

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

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 22:03 , Processed in 0.051683 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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