ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:如何修改VBA语句424报错情况

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-11-8 00:34 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
测试 10.17人事库.rar (43.26 KB, 下载次数: 12) 本人根据论坛上的一个帖子(如果sunya_0529本人能看到帮助解决,那就更好了!),自己做了一个在职、离职表人员数据在不同工作表之间的切换, 在职库里面当出现“自动离职”或“正常离职”均需要汇总到离职库,我自己做了下,自动离职可以过去,但正常离职 报错,运行时对象 出错,424,自己改了半天也没有改出来,麻烦大师们看下,调试下语句,
  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3. If Target.Cells.Count > 1 Then Exit Sub
  4. If Target.Value = "正常离职" Then
  5. Target.EntireRow.Copy Sheets(2).Range("A65536").End(xlUp).Offset(1, 0)
  6. Target.EntireRow.Delete
  7. End If
  8. If Target.Value = "自动离职" Then
  9. Target.EntireRow.Copy Sheets(2).Range("A65536").End(xlUp).Offset(1, 0)
  10. Target.EntireRow.Delete
  11. End If
  12. End Sub


复制代码

谢谢!

TA的精华主题

TA的得分主题

发表于 2014-11-8 08:49 | 显示全部楼层
本帖最后由 lu_zhao_long 于 2014-11-8 08:54 编辑

问题出在对于“正常离职”的数据已经被复制并被删除了,此时再执行检查 Target.Value = "自动离职" 的语句时,Target 已经不存在了。因此才会报这个 424 错误!
同时,楼主的代码还是有一些错误的,特别是会引起循环进行运算的。下面的代码供楼主参考,Sheet7 工作表中的代码最好也能这样修改:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False        '禁止中断
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "正常离职" Then
  Target.EntireRow.Copy Sheets(2).Range("A65536").End(xlUp).Offset(1, 0)
  Target.EntireRow.Delete
  GoTo ExitHandle                       '数据处理完毕后退出
End If
If Target.Value = "自动离职" Then
  Target.EntireRow.Copy Sheets(2).Range("A65536").End(xlUp).Offset(1, 0)
  Target.EntireRow.Delete
  GoTo ExitHandle                       '数据处理完毕后退出
End If
ExitHandle:
Application.EnableEvents = True         '恢复中断

End Sub

或者,索性使用一个 ElseIF 语句来实现:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False        '禁止中
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "正常离职" Then
  Target.EntireRow.Copy Sheets(2).Range("A65536").End(xlUp).Offset(1, 0)
  Target.EntireRow.Delete
  
ElseIf Target.Value = "自动离职" Then
        Target.EntireRow.Copy Sheets(2).Range("A65536").End(xlUp).Offset(1, 0)
        Target.EntireRow.Delete
End If
Application.EnableEvents = True         '恢复中断
End Sub


TA的精华主题

TA的得分主题

发表于 2014-11-8 15:57 | 显示全部楼层
lu_zhao_long 发表于 2014-11-8 08:49
问题出在对于“正常离职”的数据已经被复制并被删除了,此时再执行检查 Target.Value = "自动离职" 的语句时 ...

总结得真好。

看楼主的意思,不管是“正常离职”还是“自动离职”,都需要移动,除了增加错误处理和改用分支判断的方法,还可以用:
  1. Option Explicit

  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3. Application.EnableEvents = False
  4. If Target.Cells.Count > 1 Then Exit Sub
  5. If InStr(Target.Value, "离职") > 0 Then
  6.   Target.EntireRow.Copy Sheets(2).Range("A65536").End(xlUp).Offset(1, 0)
  7.   Target.EntireRow.Delete
  8. End If
  9. Application.EnableEvents = True
  10. End Sub
复制代码
To 楼主:

一直很好奇,这个通过Worksheet_Change()来实现的移动数据的功能为什么会有这么多人追捧。从数据管理的角度,不建议在源数据上直接做修改。真的有需要话,其实可以在源数据里增加一列用来标识状态,需要的时候可以通过透视表,或者是高级筛选将需要用的数据在其他工作表中汇总出来。这样可以保证源数据的准确性和一致性,实现数据存储和分析处理的逻辑分离。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-8 20:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
lu_zhao_long 发表于 2014-11-8 08:49
问题出在对于“正常离职”的数据已经被复制并被删除了,此时再执行检查 Target.Value = "自动离职" 的语句时 ...

很详细,非常感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-11-8 20:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sunya_0529 发表于 2014-11-8 15:57
总结得真好。

看楼主的意思,不管是“正常离职”还是“自动离职”,都需要移动,除了增加错误处理和改 ...

TO 大师:
    很荣幸得到你的回复,分析的很到位。 其实你说的很对,维护一个数据源头,然后在其他工作表做展现。由于企业里面入职、离职特别频繁,特别是还有多次离职、入职的,当月来了又走了,也就是离职库有多条信息,毕竟EXCEL不是一个HR系统,无法通过属性上去识别多次的离职记录。因此也就有你的那条回帖有超高人气的原因了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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