ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 分享一个EXCEL VBA+Access数据库+Listview 信息录入系统

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2020-11-29 00:49 | 显示全部楼层
感谢楼主分享,我的想法又有了实现的方式了

TA的精华主题

TA的得分主题

发表于 2021-6-4 11:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-6-9 10:54 | 显示全部楼层
楼主,帮忙看下,我按照案例改了链接的access数据库信息等,然后就报错【下标越界】,请问这是什么情况呢??


  1. '模糊查询的核心代码。可把需要查询的字段连成一个字符串,用Instr函数去匹配。
  2. '也可用Like语句 + 通配符* + Or语句实现。用Like的好处是在查询框也可用*通配符
  3. Private Sub TextBox1_Change()
  4.     Dim strSearchText As String
  5.     Dim lstItem As ListItem
  6.     If rst Is Nothing Then Exit Sub
  7.     If blnNewItem Then MsgBox "有新增行未保存,不可以查询!", vbCritical: Exit Sub
  8.     With ListView1
  9.         .ListItems.Clear
  10.         If rst.EOF And rst.BOF Then Exit Sub '空数据库
  11.         rst.movefirst
  12.         Do While Not rst.EOF
  13.             strSearchText = rst(13) & "/" & rst(14) & "/" & rst(15) '按零部件号/图纸号/零部件名称其中之一查找
  14.             If InStr(strSearchText, UCase(TextBox1)) Then
  15.                 Set lstItem = .ListItems.Add
  16.                 lstItem.Text = rst(0)
  17.                 For j = 1 To rst.fields.Count - 1
  18.                     lstItem.SubItems(j) = rst(j)
  19.                 Next
  20.             End If
  21.             rst.movenext
  22.         Loop
  23.     End With
  24. End Sub

  25. '窗体初始化。给Listview赋值。更改Listview和InkEdit的窗口程序
  26. Private Sub UserForm_Initialize()
  27.     Dim lstItem As ListItem
  28.     Dim sql As String, arrWidth
  29.     Dim i As Long, j As Long
  30.     Set cnn = CreateObject("adodb.connection")
  31.     Set rst = CreateObject("adodb.recordset")
  32.     cnn.CursorLocation = 2 '游标位置=服务器
  33.     cnn.Open "Provider=Microsoft.ACE.Oledb.12.0;Data Source=" & ThisWorkbook.Path & "\BOM数据库.mdb"
  34.     sql = "select * from DBOM"
  35.     rst.Open sql, cnn, 1, 3, 1

  36.     With ListView1
  37.         .Gridlines = True
  38.         .FullRowSelect = True
  39.         .LabelEdit = lvwManual
  40.         .View = lvwReport
  41.         .SmallIcons = ImageList1
  42.         .Font.Size = 12 '字号:小四
  43.         arrWidth = Array(80, 30, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 15, 1, 80, 80, 80, 80, 100, 20, 10, 10, 10, 10, 20, 80, 20, 40, 40, 10, 10, 10, 10, 50, 80, 50)
  44.         For i = 0 To rst.fields.Count - 1
  45.             .ColumnHeaders.Add , , rst(i).Name, arrWidth(i)
  46.         Next
  47.         Do While Not rst.EOF
  48.             Set lstItem = .ListItems.Add
  49.             lstItem.Text = rst(0)
  50.             For j = 1 To rst.fields.Count - 1
  51.                 lstItem.SubItems(j) = IIf(IsNull(rst(j)), "", rst(j))
  52.             Next
  53.             rst.movenext
  54.         Loop
  55.     End With
  56.    
  57.     'InkEdit1.MultiLine = False'提示只读属性。只可在设计窗体时设置。
  58.     'InkEdit1.BackColor = &HFFFFC0
  59.     'InkEdit1.BorderStyle = rtfNoBorder
  60.     InkEdit1.Font.Size = ListView1.Font.Size
  61.     InkEdit1.Width = 0
  62.     InkEdit1.ZOrder 0 '把InkEdit1移到最上一层,避免被Listview遮住
  63.    
  64.     sngPixelPerPoint = Pixel2PointX(1) '只计算一次,节约资源
  65.     blnFlag = True ''指示InkEdit1_Exit事件是否保存修改。按下Escape键时设为False
  66.     blnNewItem = False '新增一行标识符。如果新增行未保存或未删除,该标识为TRUE
  67.     TextBox1.SetFocus
  68.    
  69.     strAllowEditCol = "04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20/21/22/23/24/25/26/27/28/29/30/31/32/33/34/35/36" '指定Listview的4~36列可编辑,不指定该参数时则所有列可编辑
  70.     strRequiredCol = "16/17/18" '设定16-18列必填,不指定该参数时则所有列可不填
  71.    
  72.     LvmPreWndProc = GetWindowLong(ListView1.hWnd, GWL_WNDPROC)
  73.     InkPreWndProc = GetWindowLong(InkEdit1.hWnd, GWL_WNDPROC)
  74.     SetWindowLong ListView1.hWnd, GWL_WNDPROC, AddressOf WndProc
  75.     SetWindowLong InkEdit1.hWnd, GWL_WNDPROC, AddressOf WndProc
  76. End Sub

  77. '关闭窗体时,还原Listview和InkEdit控件的窗口程序
  78. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  79.     SetWindowLong ListView1.hWnd, GWL_WNDPROC, LvmPreWndProc
  80.     SetWindowLong InkEdit1.hWnd, GWL_WNDPROC, InkPreWndProc
  81. End Sub

  82. Private Sub ListView1_Click() '使用单击,在编辑大量数据时更优
  83.     ShowInkEdit
  84. End Sub

  85. Private Sub ListView1_DblClick() '双击事件
  86.     ShowInkEdit
  87. End Sub

复制代码

整理后格式统一的BOM.rar

1.22 MB, 下载次数: 123

TA的精华主题

TA的得分主题

发表于 2021-7-14 17:26 | 显示全部楼层
ivccav 发表于 2018-5-23 10:30
其实不需要使用别人的版本的,自己重新画一个Listview就行了。半分钟的事情而已。

这是我使用的版 ...

自己画一个????用什么画的呀!楼主真是牛掰格拉斯呀,能说说大致过程么?

TA的精华主题

TA的得分主题

发表于 2021-7-19 15:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2021-7-21 07:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢分享!!!!!!!!!!!!

TA的精华主题

TA的得分主题

发表于 2022-11-27 13:42 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个收藏,说不定哪天用得到。谢谢!

TA的精华主题

TA的得分主题

发表于 2022-11-28 10:22 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-8-17 11:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ivccav 发表于 2018-6-21 10:40
直接在Excel中操作的原帖答复,可做另一种参考:
http://club.excelhome.net/thread-1420382-2-1.html
...

感谢分享,新手就是缺少这种指导

TA的精华主题

TA的得分主题

发表于 2023-8-17 16:06 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-16 05:57 , Processed in 1.058125 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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