ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 求用窗口进行任务登记的VBA

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-15 23:10 | 显示全部楼层 |阅读模式
本帖最后由 feilv205 于 2018-8-18 22:07 编辑

小白学VBA,恳请各位老师、前辈给与帮助!

遇到的问题是这样的:

原本是在“任务表”中生成任务,公式弄的多,模拟才到百来行就卡的不要不要的,所以想到窗口录入任务。需要登记的信息有点多用自带窗口不方便。
还是因为涉及公式,所以弄成变通窗口,A10:Q17为手工窗口,A2:U8为辅助窗口,辅助窗口与手工窗口两者的对应关系已设置好,后者有多少件号前者对应生成多少行的信息。

一个总序号对应的件号最少1个最多8个,手工窗口中的“已有总序号”是指“任务表”中“总序号”列下最末一个已记录的最大序号。


具体需要解决的问题:
1、将辅助窗口A2:U8形成的信息行(仅记录有信息的行,不是2-8行都记录),用VBA登记在“任务表”的对应列下,信息行中的列为""时保持登记为"";
2、登记完毕对手工窗口A10:Q17中的无色区域清空,以便下次登记;
3、当次登记记录在“任务表”已有最后一行记录信息的下面。

注意:“客户”栏在两表所占的列数不同,在“登记”表中占了两列,而在“任务表”中所有标题栏都是1列。


谢谢各位帮助!

非常感谢老师不仅解决问题还帮助设计了登记界面,再次感谢!

任务登记表.rar

237.24 KB, 下载次数: 21

TA的精华主题

TA的得分主题

发表于 2018-8-16 08:09 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-16 16:33 | 显示全部楼层

大师,你的这个记录单是怎么弄的?Excel中的记录单是真的啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-16 16:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
求大师们帮忙一下啊~

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-16 19:57 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-16 21:13 | 显示全部楼层
各位老师,帮看看下面的句子。

Sub 试()
Dim arr, i&, rng As Range
    x = Application.CountA(Range("f11:f17"))                                       '用这个求出需要登记的信息行数
    If x = 0 Then MsgBox "没有信息,瞎登记? 不许!": Exit Sub            
       For i = 1 To x
         For j = 1 To 20
           arr(i, j) = Cells(i + 1, j)            '——到这里出错,“类型不匹配”
         Next
     Next
    With Sheets("任务表")
    Set rng = .Cells(Rows.Count, 1).End(3).Offset(1)
    arr(1, 1) = Val(rng.Offset(-1)) + 1
    rng.Resize(1, 20) = arr
    End With
    MsgBox "录入完毕"
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-18 16:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
用了些力气,终于可以运行了,但在计入B列消息时情况有点不对:计入按流水号自动增加,而不是需要即、登记的总序号,总序号会有重复了啊。麻烦前辈帮忙看下问题出在哪里?

Sub 录入任务()
s = Sheets("任务表").Range("a5999").End(xlUp).Row
x = Application.CountA(Range("f11:f17"))                                       '用这个求出需要登记的信息行数
    If x = 0 Then MsgBox "没有信息,瞎登记? 不许!": Exit Sub
With Sheets("任务表")
For i = 1 To x
  For j = 1 To 20
    .Cells(s + i, j) = Cells(i + 1, j).Value
  Next
  Next
End With

MsgBox "登记成功!"

Range("F11:Q17") = ""
Range("D11") = ""
Range("B12:B14") = ""
Range("D13") = ""
MsgBox "界面清空!"

End Sub

TA的精华主题

TA的得分主题

发表于 2018-8-18 18:42 | 显示全部楼层
=IF(H2<>"",TEXT(H2,"mmdd")&MID(YEAR(任务表!G2),3,2)&VLOOKUP(S2,辅助!$I$3:$K$13,3,0),"")

采购合同编号的第4、5位指向任务表的“安排日期”是什么意思?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-18 19:12 来自手机 | 显示全部楼层
一指禅62 发表于 2018-8-18 18:42
=IF(H2"",TEXT(H2,"mmdd")&MID(YEAR(任务表!G2),3,2)&VLOOKUP(S2,辅助!$I$3:$K$13,3,0),"")

采购合同编 ...

你好!
‘’任务表‘’是源头,应该是考虑从‘’安排时间‘’来与‘’任务表‘’形成匹配。这个不是关键,关键是要把新任务写进‘任务表’里。现在就差总序号登记成自动增加的流水序号问题了。

TA的精华主题

TA的得分主题

发表于 2018-8-18 20:15 | 显示全部楼层
  1. Option Explicit
  2. Dim 采购合同编号 As String
  3. Dim 物料编码 As String
  4. Dim 任务编号 As String
  5. Dim Flag As Boolean

  6. Sub 保存()
  7.     Dim R%, i%, a(), n%
  8.     If ActiveSheet.Name <> "登记" Then Sheets("登记").Select
  9.     If Not IsDate(Range("K3")) Then MsgBox "请输入正确的“安排日期”!": Exit Sub
  10.     R = Range("B65536").End(3).Row
  11.     If R < 7 Then MsgBox "没有要保存的数据!": Exit Sub
  12.     On Error Resume Next
  13.     For i = 7 To R
  14.         Main Cells(i, 2), Cells(i, 3), Cells(i, 4), Cells(i, 6), Cells(i, 7)
  15.         If Flag Then MsgBox "数据匹配错误。保存失败!": Exit Sub
  16.         n = n + 1: ReDim Preserve a(1 To 20, 1 To n)
  17.         a(1, n) = 物料编码
  18.         a(2, n) = Range("G3") '总序号
  19.         a(3, n) = 任务编号
  20.         a(4, n) = Range("G4") '产品类别
  21.         a(5, n) = Range("C4") '合同编号
  22.         a(6, n) = Range("C3") '客户
  23.         a(7, n) = Range("K3") '安排日期
  24.         a(8, n) = Range("K4") '交货日期
  25.         a(9, n) = Cells(i, 5) '安排数量
  26.         a(10, n) = Cells(i, 2) '件号
  27.         a(11, n) = Cells(i, 8) '客户型号
  28.         a(12, n) = Cells(i, 9) '生产型号
  29.         a(13, n) = Cells(i, 6) '外径
  30.         a(14, n) = Cells(i, 7) '厚度
  31.         a(15, n) = Cells(i, 10) '序1
  32.         a(16, n) = Cells(i, 11) '序2
  33.         a(17, n) = Cells(i, 3) '材料
  34.         a(18, n) = Cells(i, 4) '材料厂家
  35.         a(19, n) = 采购合同编号
  36.         a(20, n) = Cells(i, 12) '备注
  37.     Next
  38.     Sheet1.Range("A65536").End(3).Offset(1, 0).Resize(n, 20) = WorksheetFunction.Transpose(a)
  39. End Sub

  40. Private Function Main(件号 As String, 材料 As String, 材料厂家 As String, 外径 As Single, 厚度 As Single)
  41.     Flag = False
  42.     Dim a(7) As String
  43.     On Error GoTo ErrLint
  44.     a(0) = Format(Range("K3"), "mmdd") '安排日期
  45.     a(1) = Format(外径 * 100, "00000")
  46.     a(2) = Format(厚度 * 100, "0000")
  47.     a(3) = Mid(件号, 3, 1)
  48.     a(4) = Sheet2.Range("D:D").Find(材料, Lookat:=xlWhole).Offset(0, 1)
  49.     a(5) = Sheet2.Range("I:I").Find(材料厂家, Lookat:=xlWhole).Offset(0, 1)
  50.     a(6) = Sheet2.Range("I:I").Find(材料厂家, Lookat:=xlWhole).Offset(0, 2)
  51.     a(7) = "00" '待确认——采购合同编号的第4、5位指向任务表的“安排日期”是什么意思?
  52.     采购合同编号 = a(0) & a(7) & a(6)
  53.     物料编码 = a(1) & a(2) & "-" & a(3) & a(4) & a(5) & "-" & a(0)
  54.     任务编号 = Format(Range("G3"), "0000") & "-" & a(3) & a(4) & a(5)
  55.     Exit Function
  56. ErrLint:
  57.     Flag = True
  58. End Function
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 10:57 , Processed in 0.028215 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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