ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 窗体录入问题

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-30 09:44 | 显示全部楼层
dongjuwen 发表于 2019-9-30 09:18
控件多了,有的时候对应到单元格会出错,借助Array写入,代码简化的同时也把出错率降低了。仅供参考!
Pri ...

优化的代码可用,不过问题依然存在,请配合标题下说明看截图
截图.png

TA的精华主题

TA的得分主题

发表于 2019-9-30 09:47 | 显示全部楼层
54321shenyong 发表于 2019-9-30 09:44
优化的代码可用,不过问题依然存在,请配合标题下说明看截图

把Worksheet_Change里编号的代码删除了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-30 09:51 | 显示全部楼层
本帖最后由 54321shenyong 于 2019-9-30 10:00 编辑
microyip 发表于 2019-9-30 09:39
说白了,就是伸手党,没意思

对这说法表示不服,虽然是各种方式得来的代码,也在努力的理解学习和掌握进行消化,请对待比自身进阶低的学习者,保持低调才是正确的心态。每一位掌握了技能的,都是从小白一步一步走过来的,只是学习的方法和途径有差异而已,这帖子是求助帖,不是伸手帖,请分辨明白。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-30 10:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 54321shenyong 于 2019-9-30 10:27 编辑
dongjuwen 发表于 2019-9-30 09:18
控件多了,有的时候对应到单元格会出错,借助Array写入,代码简化的同时也把出错率降低了。仅供参考!
Pri ...

请问:MsgBox提示代码怎么排除“当日单号” ,“三级目录”,“对方单位”这三项的提示呢? 这三项不是必选项,特殊情况下才需要填写

TA的精华主题

TA的得分主题

发表于 2019-9-30 10:34 | 显示全部楼层
54321shenyong 发表于 2019-9-30 10:20
请问:MsgBox提示代码怎么排除“当日单号” ,“三级目录”,“对方单位”这三项的提示呢? 这三项不是必 ...

for i=^next
是对各控件的循环,对应一下ar(i)就可以排除了

TA的精华主题

TA的得分主题

发表于 2019-9-30 10:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
同时还要把需要排除的控件的change事件删除了,要不然也不行的

TA的精华主题

TA的得分主题

发表于 2019-9-30 10:52 | 显示全部楼层
Private Sub CmdOk_Click()     '写入工作表
    ar = Array("日期", "当日单号", "一级类目", "二级类目", "三级类目", "对方单位", "概要", "所属项目", "经办人", "付款人", "资金来源")
    br = Array("日期", "一级类目", "二级类目", "经办人", "付款人", "资金来源", "对方单位", "所属项目")
    For i = 0 To UBound(br)
        If Me.Controls(br(i)) = "" Then
            MsgBox "请录入:" & br(i), vbCritical, "友情提示"
            Me.Controls(br(i)).SetFocus
            Exit Sub
        End If
    Next
   
    Dim xrow As Long                     '定义变量xrow,用来保存要输入数据的工作表行号
    xrow = Range("A4").CurrentRegion.Rows.Count + 3  '求工作表中第1条空行的行号
    For i = 0 To UBound(ar)
        If i > 6 Then n = 4 Else n = 3
        Cells(xrow, i + n) = Me.Controls(ar(i)).Value
        Me.Controls(ar(i)).Value = ""
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2019-9-30 12:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
改个思路
  1. Function CheckValIsNull() As Boolean
  2.     CheckValIsNull = True
  3.      '判断录入项目是否为空
  4.     If Trim(日期.Text) = "" Then
  5.         MsgBox "请录入日期!", vbInformation, "友情提示"
  6.         日期.SetFocus
  7.         Exit Function
  8.     End If
  9.    
  10.      '判断当日单号是否为空
  11.     If Trim(当日单号.Value) = "" Then
  12.         MsgBox "请录入单号!", vbInformation, "友情提示"
  13.         当日单号.SetFocus
  14.         Exit Function
  15.     End If
  16.    
  17.      '判断一级类目 是否为空
  18.     If Trim(一级类目.Value) = "" Then
  19.         MsgBox "请录入一级类目!", vbInformation, "友情提示"
  20.         一级类目.SetFocus
  21.         Exit Function
  22.     End If
  23.    
  24.      '判断二级类目 是否为空
  25.     If Trim(二级类目.Value) = "" Then
  26.         MsgBox "请录入二级类目!", vbInformation, "友情提示"
  27.         二级类目.SetFocus
  28.         Exit Function
  29.     End If
  30.    
  31.      '判断详细描述是否为空
  32.     If Trim(概要.Text) = "" Then
  33.         MsgBox "请录入详细描述!", vbInformation, "友情提示"
  34.         概要.SetFocus
  35.         Exit Function
  36.     End If
  37.    
  38.      '判断详细描述是否为空
  39.     If Trim(所属项目.Value) = "" Then
  40.         MsgBox "请录入所属项目!", vbInformation, "友情提示"
  41.         所属项目.SetFocus
  42.         Exit Function
  43.     End If
  44.    
  45.      '判断付款人是否为空
  46.     If Trim(付款人.Value) = "" Then
  47.         MsgBox "请录入付款人!", vbInformation, "友情提示"
  48.         付款人.SetFocus
  49.         Exit Function
  50.     End If
  51.    
  52.      '判断资金来源是否为空
  53.     If Trim(资金来源.Value) = "" Then
  54.         MsgBox "请录入资金来源!", vbInformation, "友情提示"
  55.         资金来源.SetFocus
  56.         Exit Function
  57.     End If

  58.     CheckValIsNull = False
  59. End Function

  60.                                                             '三级联动菜单
  61. Private Sub CmdOk_Click()     '写入工作表
  62.     Dim arrResult As Variant, xrow As Long
  63.     If CheckValIsNull Then Exit Sub
  64.      '求工作表中第1条空行的行号
  65.     xrow = Range("B" & Rows.Count).End(xlUp).Row + 1
  66.     If xrow < 5 Then xrow = 5
  67.     ReDim arrResult(1 To 1, 1 To 13)
  68.     arrResult(1, 1) = xrow - 4
  69.     arrResult(1, 2) = 日期.Value
  70.     arrResult(1, 3) = 当日单号.Value
  71.     arrResult(1, 4) = 一级类目.Value
  72.     arrResult(1, 5) = 二级类目.Value
  73.     arrResult(1, 6) = 三级类目.Value
  74.     arrResult(1, 7) = 对方单位.Value
  75.     arrResult(1, 8) = 概要.Value
  76.     arrResult(1, 10) = 所属项目.Value
  77.     arrResult(1, 11) = 经办人.Value
  78.     arrResult(1, 12) = 付款人.Value
  79.     arrResult(1, 13) = 资金来源.Value
  80.     Range("B" & xrow).Resize(1, 13) = arrResult
  81.    
  82.     '将窗体中输入的数据清除,等待下次输入
  83.     日期.Value = ""
  84.     当日单号.Value = ""
  85.     一级类目.Value = ""
  86.     二级类目.Value = ""
  87.     三级类目.Value = ""
  88.     对方单位.Value = ""
  89.     概要.Value = ""
  90.     所属项目.Value = ""
  91.     经办人.Value = ""
  92.     付款人.Value = ""
  93.     资金来源.Value = ""
  94. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-30 17:40 | 显示全部楼层
本帖最后由 54321shenyong 于 2019-9-30 17:55 编辑
dongjuwen 发表于 2019-9-30 10:52
Private Sub CmdOk_Click()     '写入工作表
    ar = Array("日期", "当日单号", "一级类目", "二级类目" ...

研究对比了一下午,二级目录和三级目录用这个代码都不会写入工作表,基础知识太差,实在汗颜
还有,请问Worksheet_Change 事件里面的字符提取公式是应该移动位置还是该怎么修改代码呢?

我的思路是:I列数据通过窗体写入之后,再通过Worksheet_Change事件运行代码,把数字提取到J列  不知道这个思路对不对

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-30 17:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

dongjuwen老师的代码找不到二级、三级目录不写入的原因

这个代码运行时“I列”的字符提取公式又没运行,老师的思路架构也没整明白,整个下午都在研究学习
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-5 03:48 , Processed in 0.040941 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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