ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 借星光老师的文章代码,求一个数据录入系统的VBA代码

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-18 09:30 | 显示全部楼层
YZC51 发表于 2020-1-17 23:15
抱歉!刚看到!
试试

灰常感谢回复,有二个问题。
原代码:
    ActiveCell.Value = Mid(strMy, 3)
     ActiveCell(1, 2) = Mid(strMy2, 2)
要改成:
    ActiveCell.Value = Mid(strMy, 2)
     ActiveCell(1, 2) = Mid(strMy2, 2)

  1、 可以详细解释下mid在VBA里的含义吗?如果按照excel函数里面解释,mid第二参数意思是从第2位开始取,这里为什么要是“2”呢?第一位是什么呢?


我试着修改,如果第二参数是“1”,D列里的值首字符就是“、”。
4.jpg
如果第二参数是“3”,D单列里的值少第一个字符。
5.jpg
2、如果第二参数是“2”,就刚刚好。但是又有个问题要解决,怎么去重呢?如果E列勾选了“酒”、“其他”D列会显示二个“招待费”,如何去重呢?
3.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-18 09:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
YZC51 发表于 2020-1-17 23:20
.Top = Target.Top + Target.Height 'listbox的顶端位置,去掉(2),不影响显示呢?

与上面代码等效

这个Target(2).Top精妙,比写Target.Top + Target.Height精简多了,是我刚开始没注意,又学到一个知识点。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-18 09:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zpy2 发表于 2020-1-18 07:07
建议你还是把 烟酒 和 差旅费 分开,不要合并成一个金额,做报表时再合并。。。

谢谢建议,但是这个就涉及到原始单据的填写规范问题了,有些票面上把三种明细费用合并在一起了,却只有一个总金额,我没法拆分金额,就不能分开等级,但是费用明细又不能漏项。有没有其他思路帮忙解决一下呢?帖子里面要解决的问题有几个,已解决的就划掉,我等下上传一个最新的附件,请帮忙看看。

TA的精华主题

TA的得分主题

发表于 2020-1-18 10:03 来自手机 | 显示全部楼层
leaveLK 发表于 2020-1-18 09:37
谢谢建议,但是这个就涉及到原始单据的填写规范问题了,有些票面上把三种明细费用合并在一起了,却只有一 ...

这个就涉及到原始单据的填写规范问题了,
如果你们管理上没有这个需求,也无所谓规范不规范,因为,差旅费是可以税前列支的,烟酒之类的招待费一般都是限额的,所以,大多数公司都是分开列支的。另外,除了手工填写,如果单据多,员工可以需要填写电子版的比一个人输入要好。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-18 10:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zpy2 发表于 2020-1-18 10:03
这个就涉及到原始单据的填写规范问题了,
如果你们管理上没有这个需求,也无所谓规范不规范,因为,差旅 ...

我是这个意思:正常的是第一行烟 500元,第二行酒500元,就很好处理,但是有一种单子,费用明细只有一行,写的烟、酒、差旅费,总费用1000元。那我也不能把烟酒差旅费分开,我也只能登记一行,在多项选择框里就要多选,不知你有没有什么好方法。

TA的精华主题

TA的得分主题

发表于 2020-1-18 10:14 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
leaveLK 发表于 2020-1-18 10:10
我是这个意思:正常的是第一行烟 500元,第二行酒500元,就很好处理,但是有一种单子,费用明细只有一行 ...

有一种单子,费用明细只有一行,写的烟、酒、差旅费,总费用1000元。你根据你们的情况输入就是了,你说的是如何快捷的输入这些项目,我说的是管理的精细化程度(开始我以为你是看发票来填写的),和你的问题不是一个层面上的。

TA的精华主题

TA的得分主题

发表于 2020-1-18 11:04 | 显示全部楼层
leaveLK 发表于 2020-1-18 09:30
灰常感谢回复,有二个问题。
原代码:
    ActiveCell.Value = Mid(strMy, 3)

1、 可以详细解释下mid在VBA里的含义吗?如果按照excel函数里面解释,mid第二参数意思是从第2位开始取,这里为什么要是“2”呢?第一位是什么呢?
答:因为单元格是符号“、”所以从第二个开始取

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-1-18 11:15 | 显示全部楼层
简单修改下
Private Sub ListBox1_Change()
    Dim i As Long, strMy As String
    With ListBox1
        'If .Selected(0) = True Then .Selected(0) = False
        '如果用户选取的是标题行那么撤销选取
        For i = 0 To .ListCount - 1
            '遍历listbox的记录,如果被选中则按换行符合并
            If .Selected(i) = True Then
                temp1 = "、" & .List(0, 0)
                temp2 = "、" & .List(1, 0)
                strMy = strMy & "、" & .List(i, 0)
                strMy2 = strMy2 & "、" & .List(i, 1)
                '取list的第二列
                '无论列还是行的索引都是从0开始的,因此第二列为1
            End If
        Next
    End With
    ActiveCell.Value = Replace(Replace(Mid(strMy, 2), temp1, ""), temp2, "")
    ActiveCell(1, 2) = Mid(strMy2, 2)
    '数据写入单元格
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-1-18 14:58 | 显示全部楼层
优化下
Private Sub ListBox1_Change()
    Dim i As Long, strMy As String
    With ListBox1
        'If .Selected(0) = True Then .Selected(0) = False
        '如果用户选取的是标题行那么撤销选取
        Lc = .ListCount - 1
        For i = 0 To Lc        '遍历listbox的记录,如果被选中则按换行符合并
            If .Selected(i) = True Then
            If InStr(strMy, .List(i, 0)) = 0 Then strMy = strMy & "、" & .List(i, 0)

                strMy2 = strMy2 & "、" & .List(i, 1) ', 2)
                '取list的第二列
                '无论列还是行的索引都是从0开始的,因此第二列为1
            End If
        Next
    End With
    ActiveCell.Value = Mid(strMy, 2)
    ActiveCell(1, 2) = Mid(strMy2, 2)
    '数据写入单元格
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-1-18 15:08 | 显示全部楼层
工作表事 件
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.CountLarge > 1 Then Exit Sub
    If Target(0, 1) = "" Then Exit Sub
    If Target.Column = 4 Then
        If Target <> "" And Target.Row > 3 Then
            Target(1, -2).Value = Target.Row - 3
            Target(1, -1).Value = Target.Row - 3 + 10 ^ 6
            Target(1, 0).Value = Date
        End If
    End If
    If Target.Column < 3 Then
        If Target.Offset(-1, 0).Value <> "" And Target.Value = "" Then
            Target.Value = Target.Offset(-1, 0) + 1
        End If
    End If
End Sub

评分

2

查看全部评分

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

本版积分规则

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

GMT+8, 2024-11-29 03:59 , Processed in 0.048206 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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