ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 已解决 差旅费报销单

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-2-5 14:30 | 显示全部楼层 |阅读模式
本帖最后由 学良 于 2020-2-6 16:02 编辑

       这是给同事做的一个表,有兰色的单元格设有公式,不必填写亦不要删除.
       但个人觉得,若能每次打印时将其保存在[差旅费报销清单]表中就完美了.因本人不甚熟练VBA,
只能在此向各位老师求助,诚望各位高师帮忙写写代码完成录入功能!
       我已作好了模似效果表,请您费心看看.
       其实我也找了很多类似录入的表格,作了多次试验匀未成功,只好作一个另存表格的功能,
但仍不如录入功能方便实用,无耐只能做一次"申手党",辛苦您了!
                    谢谢!  
    期待传来喜讯.

差旅费报销单-Q.zip (38.14 KB, 下载次数: 683)

A1-M31.jpg

在liulang0808 版主和一把小刀闯天下, wodewan ,  海好呀 老师们帮助下,  已经园满解决,现将完整版发上来,

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-2-5 15:08 | 显示全部楼层
  1. Sub 按钮3_Click()
  2.     [a1:n27].PrintOut
  3.     arr = Sheets("差旅费报销清单").UsedRange
  4.     r = UBound(arr) + 1
  5.     Application.ScreenUpdating = False
  6.     With Sheets("差旅费报销清单")
  7.         .Cells(r, 1) = r - 2
  8.         For i = 2 To UBound(arr, 2)
  9.             If InStr(arr(2, i), "-") > 0 Then
  10.                 str1 = Split(arr(2, i), "-")(0)
  11.             Else
  12.                 str1 = arr(2, i)
  13.             End If
  14.             .Cells(r, i) = Range(str1)
  15.         Next i
  16.     End With
  17.     Application.ScreenUpdating = True
  18. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2020-2-5 15:09 | 显示全部楼层
不知道理解的对不对,供参考。。。。。。

差旅费报销单-.zip

42.6 KB, 下载次数: 192

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-2-5 15:27 | 显示全部楼层
本帖最后由 罗达 于 2020-2-5 16:37 编辑

差旅费报销单-.zip (41.7 KB, 下载次数: 119) 学良老师是大神哦,表格设计(尤其财务)的那叫一个亮!一直膜拜。现有代码未做保存后的数据清空,如需要请回复。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-5 15:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liulang0808 发表于 2020-2-5 15:09
不知道理解的对不对,供参考。。。。。。

非常感谢版主出手相助!  是我没说清楚.
我要的效果是象[模似效果表]那样, 点一次按扭,将[差旅费报销单]表中的数据全部录入至[差旅费报销清单]表中,
现在点一次只将第一行数据录入进去了.  请您再给看看. 谢谢了!

TA的精华主题

TA的得分主题

发表于 2020-2-5 16:05 | 显示全部楼层
Option Explicit

Sub test()
  Dim arr, i, j, t, a, b, c, d, e, pos
  pos = Sheets("差旅费报销清单").[a1].CurrentRegion.Offset(1).Resize(1).Value
  ReDim arr(1 To 10 ^ 3, 1 To UBound(pos, 2))
  With Sheets("差旅费报销单")
    t = Split(pos(1, 7), "-")
    a = Val(Mid(t(0), 2)): b = Val(Mid(t(1), 2))
    For j = 2 To UBound(pos, 2)
      If InStr(pos(1, j), "-") Then
        t = Split(pos(1, j), "-")
        c = Val(Mid(t(0), 2)): d = Val(Mid(t(1), 2)): e = Left(t(0), 1)
        For i = c To d
          arr(i - c + 1, j) = .Range(e & i).Value
        Next
      Else
        For i = a To b
          arr(i - a + 1, j) = .Range(pos(1, j)).Value
        Next
      End If
    Next
  End With
  With Sheets("差旅费报销清单")
    .Range("b:b, g:g, i:i").NumberFormatLocal = "yyyy/mm/dd"
    With .Cells(.Cells(Rows.Count, "b").End(xlUp).Row + 1, "a").Resize(b - a + 1, UBound(arr, 2))
      .Borders.LineStyle = xlContinuous
      .Value = arr
    End With
  End With
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-2-5 16:07 | 显示全部楼层
之前理解有误
现在按照需求模拟了,供餐卡
第二张表的,第二行需要保留,偷懒直接借用了

差旅费报销单-.zip

44.04 KB, 下载次数: 194

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-2-5 16:34 | 显示全部楼层

学习老师的代码。谢谢老师!
Sub test()
  Dim arr, i, j, t, a, b, c, d, e, pos
  pos = Sheets("差旅费报销清单").[a1].CurrentRegion.Offset(1).Resize(1).Value
  rq = Format(Now, "yymmddhhmmss")
  ReDim arr(1 To 10 ^ 3, 1 To UBound(pos, 2))
  With Sheets("差旅费报销单")
    t = Split(pos(1, 7), "-")
    a = Val(Mid(t(0), 2)): b = Val(Mid(t(1), 2))
    For j = 2 To UBound(pos, 2)
      If InStr(pos(1, j), "-") Then
        t = Split(pos(1, j), "-")
        c = Val(Mid(t(0), 2)): d = Val(Mid(t(1), 2)): e = Left(t(0), 1)
        For i = c To d
          arr(i - c + 1, j) = .Range(e & i).Value
        Next
      Else
        For i = a To b
        arr(i - a + 1, 1) = rq
          arr(i - a + 1, j) = .Range(pos(1, j)).Value
        Next
      End If
    Next
  End With
  With Sheets("差旅费报销清单")
    .Range("b:b, g:g, i:i").NumberFormatLocal = "yyyy-mm-dd"
    .Range("A:A").NumberFormatLocal = "000000"
    With .Cells(.Cells(Rows.Count, "A").End(xlUp).Row + 1, "a").Resize(b - a + 1, UBound(arr, 2))
      .Borders.LineStyle = xlContinuous
      .Value = arr
    End With
  End With
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-5 16:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liulang0808 发表于 2020-2-5 16:07
之前理解有误
现在按照需求模拟了,供餐卡
第二张表的,第二行需要保留,偷懒直接借用了

基本成功了, 您辛苦了!
美中不足的是[差旅费报销单]的18行至21行,只有两行有数据,而[差旅费报销清单]中却复制了八行.
如果把多余的行数空出来,那就完美了.   有时间时您再给看看, 不好意思,让您受累了!

TA的精华主题

TA的得分主题

发表于 2020-2-5 16:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

厉害,就像函数嵌套,学习了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 22:04 , Processed in 0.048451 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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