Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2083|回复: 7

[已解决]边输入时能达到这样的合法检查吗?

[复制链接]
发表于 2011-2-20 09:13 | 显示全部楼层 |阅读模式
J列,是输入生产件数的,  不允许在所有第3\4\5列相同后  所有J列之和中不能超过"允许生产数",否则要进行提示,
I列,是输入生产工时的,一般不允许超过14小时.否则进行提示


   希望不要用"数据有效性", 合法性检查,
    一则它不允许超过了的数值输入进单元格,有些生产特殊情况是要输入大于值.
    二则怕其他员工不知此列有数据有效性设置,将此列删除掉.

我知道是用:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 5 Then Application.SendKeys "%{down}"
   
If Target.Column = 5 And Target.Count = 1 And Target.Row > 5 Then
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
   .......
end sub
但具体代码我就写不出了
    具体见附件
最佳答案
2011-2-20 10:48
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim d As Object, arr, c As Range
  3. Dim t, y
  4. Set d = CreateObject("scripting.dictionary")
  5. If Target.Count > 1 Then Exit Sub
  6. If Target.Row > 4 Then
  7. If Target.Column = 9 Then
  8. If Target > 14 Then
  9. t = MsgBox("录入数大于14,确定要输入吗?", vbOKCancel, "提示")
  10. If Not t = vbOK Then
  11. Target.ClearContents
  12. End If
  13. End If
  14. ElseIf Target.Column = 10 Then
  15. arr = Range("a5:o" & [a65536].End(3).Row)
  16. For i = 1 To UBound(arr)
  17. d(arr(i, 5)) = d(arr(i, 5)) + arr(i, 10)
  18. Next
  19. With Sheets("订单数")
  20. Set c = .Range("c:c").Find(Cells(Target.Row, 5).Value, , , 1)
  21. If Not c Is Nothing Then
  22. If d(c.Value) > c.Offset(, 2) Then
  23. y = MsgBox("超过可以生产数,确定要输入吗?", vbYesNo, "提示")
  24. If y = vbNo Then
  25. Target.ClearContents
  26. End If
  27. End If
  28. Else
  29. MsgBox "没有该项订单!"
  30. End If
  31. End With
  32. End If
  33. End If
  34. End Sub
复制代码

自动报警.rar

10.21 KB, 下载次数: 28

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-2-20 10:48 | 显示全部楼层    本楼为最佳答案   
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim d As Object, arr, c As Range
  3. Dim t, y
  4. Set d = CreateObject("scripting.dictionary")
  5. If Target.Count > 1 Then Exit Sub
  6. If Target.Row > 4 Then
  7. If Target.Column = 9 Then
  8. If Target > 14 Then
  9. t = MsgBox("录入数大于14,确定要输入吗?", vbOKCancel, "提示")
  10. If Not t = vbOK Then
  11. Target.ClearContents
  12. End If
  13. End If
  14. ElseIf Target.Column = 10 Then
  15. arr = Range("a5:o" & [a65536].End(3).Row)
  16. For i = 1 To UBound(arr)
  17. d(arr(i, 5)) = d(arr(i, 5)) + arr(i, 10)
  18. Next
  19. With Sheets("订单数")
  20. Set c = .Range("c:c").Find(Cells(Target.Row, 5).Value, , , 1)
  21. If Not c Is Nothing Then
  22. If d(c.Value) > c.Offset(, 2) Then
  23. y = MsgBox("超过可以生产数,确定要输入吗?", vbYesNo, "提示")
  24. If y = vbNo Then
  25. Target.ClearContents
  26. End If
  27. End If
  28. Else
  29. MsgBox "没有该项订单!"
  30. End If
  31. End With
  32. End If
  33. End If
  34. End Sub
复制代码

自动报警.rar

17.79 KB, 下载次数: 8

回复

使用道具 举报

发表于 2011-2-20 11:26 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2011-2-20 14:09 | 显示全部楼层
二楼的高手,还在吗? 可能是我表达不清楚了...
5列(为08064B)第6列(92号工序)的行,即#02-52A制单08064B款号92工序做了100件,那以后再输入此工序


并不是只要第3列和第4列相同,就计算之和.
而查询到是3\4\5列都相同的和
(即只有相同制单 相同款号 相同工序的完成件数之和 超过了"允许生产数"才报警提示)


下面也是我对你的代码有不理解之处, 另不正确之处也请正

Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object, arr, c As Range
Dim t, y
Set d = CreateObject("scripting.dictionary")
If Target.Count > 1 Then Exit Sub      这一行是不是说如果同时选择了两行以上就不运行此触发??  不懂
If Target.Row > 4 Then                   "从第5行开始以后.如果有更改就开始触发
      If Target.Column = 9 Then          '第9列开始判断输入的所使用的工时是否大于14个小时
            If Target > 14 Then
               t = MsgBox("录入数大于14,确定要输入吗?", vbOKCancel, "提示")
                If Not t = vbOK Then
                   Target.ClearContents
                End If
        End If
ElseIf Target.Column = 10 Then      ' 判断第10列写的完成件数,
arr = Range("a5:o" & [a65536].End(3).Row)     '   [a65536].End(3).Row)  与[a65536].End(xlUp).Row)写法是不是一致
For i = 1 To UBound(arr)
d(arr(i, 5)) = d(arr(i, 5)) + arr(i, 10)      '将第10所有之和加到字典中去,但为什么前面一个是arr(i, 5)),而被加数为arr(i, 10) 不理解??
Next
With Sheets("订单数")
Set c = .Range("").Find(Cells(Target.Row, 5).Value, , , 1)    ??不解c:c 是什么意义,
        If Not c Is Nothing Then
                If d(c.Value) > c.Offset(, 2) Then       '不理解d(c.Value) > c.Offset(, 2) 的意思???
                y = MsgBox("超过可以生产数,确定要输入吗?", vbYesNo, "提示")
If y = vbNo Then
Target.ClearContents
End If
End If
Else
MsgBox "没有该项订单!"
End If
End With
End If
End If
End Sub
回复

使用道具 举报

 楼主| 发表于 2011-2-20 14:12 | 显示全部楼层
并不是只要第4列和第5列相同,就计算之和是否超过"允许生产数".
而查询到是4\5\6列都相同的和 超过"允许生产数".
(即只有相同制单 相同款号 相同工序的完成件数之和 超过了"允许生产数"才报警提示)

  上面写错列数
回复

使用道具 举报

 楼主| 发表于 2011-2-21 10:15 | 显示全部楼层
有没有高手还愿意出手??
回复

使用道具 举报

 楼主| 发表于 2011-2-23 21:24 | 显示全部楼层
有没有其他高手愿意出手??
回复

使用道具 举报

 楼主| 发表于 2011-2-24 08:53 | 显示全部楼层
有没有其他高手愿意出手??
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-21 04:46 , Processed in 0.332001 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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