ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 窗体录入问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-29 21:47 | 显示全部楼层 |阅读模式
本帖最后由 54321shenyong 于 2019-9-29 21:51 编辑

问题描述:
    1、窗体设置了空值提醒,点增加有提示。
    2、按理有空值提醒不应该有录入操作,现在在未录入数据的情况下点击确定有提示,但序列“B”列和金额“I”列会运行代码,两列都有录入操作。


现有代码结构:
    1、窗体录入代码在窗体“UserForm1”内
    2、序列“B”列自动填充、金额“I”列计算“元”为单位的代码在“Sheet7”《支出流水》工作表下
    3、有提示的项为必填项。

问题处理要求:
      1、在窗体提示范围内的必填项数据填充完成后点确定才统一录入。      2、缺少必填项不触发“B列”“I列”事件。


上传附件静等大佬!

   


窗体录入问题.rar

415.5 KB, 下载次数: 117

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-30 08:36 | 显示全部楼层
国庆到来,今天已是节前最后一天,希望大佬能关注一下这个帖子

TA的精华主题

TA的得分主题

发表于 2019-9-30 09:03 | 显示全部楼层
If 日期 = "" Then
MsgBox "请录入日期!", vbInformation, "友情提示"
后面加上"
日期.SetFocus
Exit Sub"
就可以退出过程了。

TA的精华主题

TA的得分主题

发表于 2019-9-30 09:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
现在你写的代码有哪里不懂得怎么写呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-30 09:14 | 显示全部楼层
本帖最后由 54321shenyong 于 2019-9-30 09:24 编辑
microyip 发表于 2019-9-30 09:03
现在你写的代码有哪里不懂得怎么写呢?

有些代码是在论坛里求助一些前辈大佬写的,然后在根据自身需要在论坛找了一些实用的组合而来,买了书一直没时间学习,所以有问题只有求助大佬

截图.png

TA的精华主题

TA的得分主题

发表于 2019-9-30 09:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
控件多了,有的时候对应到单元格会出错,借助Array写入,代码简化的同时也把出错率降低了。仅供参考!
Private Sub CmdOk_Click()     '写入工作表
    ar = Array("日期", "当日单号", "一级类目", "二级类目", "三级类目", "对方单位", "概要", "所属项目", "经办人", "付款人", "资金来源")
    For i = 0 To UBound(ar)
        If Me.Controls(ar(i)) = "" Then
            MsgBox "请录入:" & ar(i), vbCritical, "友情提示"
            Me.Controls(ar(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)
        Cells(xrow, i + 3) = Me.Controls(ar(i)).Value
        Me.Controls(ar(i)).Value = ""
    Next
End Sub

TA的精华主题

TA的得分主题

发表于 2019-9-30 09:20 | 显示全部楼层
我就随便提点建议,没有认真看代码,我个人不太喜欢窗体,看见窗体就头大:
1、“B”列“I”列的运行:你把这两列的处理代码放在if条件的后面了,也就是说放在条件的外面。你的代码:
     If 日期 = "" Then
        MsgBox "请录入日期!", vbInformation, "友情提示"
     elseif ......
        .....
     endif
     xrow = Range("A4").CurrentRegion.Rows.Count + 3
     很明显,不管if条件如何,最后一行都会运行的;
2、你窗体的代码还有很多其他问题,你应该是使用了字典,但这里并没有排错功能,比如在一级、二级、三级类目那三个地方随便乱输一通,代码就出错了,因为下级联动列表是依赖上级列表的。这个地方需要增加排错功能,需要排除掉字典中没有的信息;
3、这样设计后理论上应该是只能在窗体中录入而不能在单元格直接录入,要不然窗体就没有存在的价值。但事实上,表格中的单元格也是可以录入的,随便乱输一通大多数情况也都能通过;
4、我个人还是觉得窗体录入是一大障碍,对于你这个应用来说,窗体完全没存在的价值:
    1)字段数量不多,简单的横向排列就能很好的实现录入,不需要切屏,没必要用窗体;
    2)选项联动列表我认为数据有效性更好用,因为系统已经内置了排错功能,不需要额外代码;
    3)直接单元格录入兼顾录入和修改,而窗体就完全不是那回事,你还没有考虑修改的事情;
    4)单元格录入在界面上更友好,窗体存在于excel界面前端,不仅显得别扭,还需要频繁切换;
    可能还有更多,其实只要你一眼扫过去,多层叠加的窗口结构都远不如平铺的界面来的简介直观,就像浏览器,有时都没有分页,比如浏览图片,我认为这才是趋势;

TA的精华主题

TA的得分主题

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

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

TA的精华主题

TA的得分主题

发表于 2019-9-30 09:38 | 显示全部楼层
窗体录入还用Worksheet_Change,这种“创意”佩服……

TA的精华主题

TA的得分主题

发表于 2019-9-30 09:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
说白了,就是伸手党,没意思
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-25 06:06 , Processed in 0.043232 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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