Excel精英培训网

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

[已解决]求帮忙修改代码:发现二义性的名称Workbook_SheetChange

[复制链接]
发表于 2014-7-4 17:51 | 显示全部楼层 |阅读模式
本帖最后由 ht094156 于 2014-7-9 08:49 编辑

有三个一样的代码,只不过是引用的内容不同(c.Offset(0, 1).Value = "=人员!B2 "   )
如何在This Workbook中,同时使用三个代码
之前用一个时不会出错,将三个代码放在这里,会提示,应如何修改。
能不能将三个代码整合在一起?

已上传原件,希望能找到答案

QQ五笔截图未命名.png
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Cells(1, 1).Column <> 1 Then Exit Sub
Dim c As Range
For Each c In Target
    If c.Column = 1 Then
        If c.Value = "" Then
            c.Offset(0, 1).Value = ""
        Else
            c.Offset(0, 1).Value = Format(Now, "yyyy-mm-dd hh:mm:ss")
        End If
    End If
Next
End Sub

--------------------------------------------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Cells(1, 1).Column <> 8 Then Exit Sub
Dim c As Range
For Each c In Target
    If c.Column = 8 Then
        If c.Value = "" Then
            c.Offset(0, 1).Value = ""
        Else
            c.Offset(0, 1).Value = "=人员!B2 "        这里引用的是人员!B2 的内容,但在表格中会显示公式=人员!B2,应该改成显示值
        End If
    End If
Next
End Sub

-----------------------------------------------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Cells(1, 1).Column <> 8 Then Exit Sub
Dim c As Range
For Each c In Target
    If c.Column = 8 Then
        If c.Value = "" Then
            c.Offset(0, 1).Value = ""
        Else
            c.Offset(0, 1).Value = "=人员!B3 "        这里引用的是人员!B2 的内容,但在表格中会显示公式=人员!B2,应该改成显示值
        End If
    End If
Next
End Sub





最佳答案
2014-7-4 23:36
本帖最后由 su45 于 2014-7-6 10:29 编辑

因你附件中没数据,不能调试,只发上代码:
  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  2. If Sh.Name = "人员" Then End
  3. If Target.Column = 13 And Target.Count = 1 Then
  4.     If Target.Value <> "" Then Target.Offset(0, 1).Value = Format(Date, "yyyy-mm-dd hh:mm:ss")
  5.     If Target.Value <> "" Then Target.Offset(0, 2) = Sheets("人员").Range("B3 ")
  6. ElseIf Target.Column = 8 And Target.Count = 1 Then
  7.     If Target.Value <> "" Then Target.Offset(0, 1) = Sheets("人员").Range("B2 ")
  8. End If
  9. End Sub
复制代码

007.rar

220.08 KB, 下载次数: 5

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-7-4 18:03 | 显示全部楼层
附件怎么是个txt文件...你带上源数据,才能调试呀,不然怎么知道改的对不对
回复

使用道具 举报

 楼主| 发表于 2014-7-4 18:12 | 显示全部楼层
ghostjiao 发表于 2014-7-4 18:03
附件怎么是个txt文件...你带上源数据,才能调试呀,不然怎么知道改的对不对

随便一个代码都可以正常运行的,只不过现在加多2个而已,真要上传啊
回复

使用道具 举报

发表于 2014-7-4 18:15 | 显示全部楼层
坐等高手
回复

使用道具 举报

 楼主| 发表于 2014-7-4 18:37 | 显示全部楼层
ghostjiao 发表于 2014-7-4 18:03
附件怎么是个txt文件...你带上源数据,才能调试呀,不然怎么知道改的对不对

已上传了
回复

使用道具 举报

发表于 2014-7-4 19:01 | 显示全部楼层
本帖最后由 su45 于 2014-7-4 19:02 编辑

再看看吧!
回复

使用道具 举报

发表于 2014-7-4 19:07 | 显示全部楼层
本帖最后由 无聊的疯子 于 2014-7-4 19:10 编辑

  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  2. If Target.Cells(1, 1).Column <> 1 or  Target.Cells(1, 1).Column <>8 Then Exit Sub
  3. Dim c As Range
  4. For Each c In Target
  5.      If c.Column = 1 Then
  6.          If c.Value = "" Then
  7.              c.Offset(0, 1).Value = ""
  8.          Else
  9.              c.Offset(0, 1).Value = Format(Now, "yyyy-mm-dd hh:mm:ss")
  10.          End If
  11.      ElseIf c.Column = 8 Then
  12.          If c.Value = "" Then
  13.              c.Offset(0, 1).Value = ""
  14.          Else
  15.              c.Offset(0, 1).Value = "=人员!B2 "        这里引用的是人员!B2 的内容,但在表格中会显示公式=人员!B2,应该改成显示值
  16.         End If
  17.      End If
  18. Next
  19. End Sub
复制代码
回复

使用道具 举报

发表于 2014-7-4 19:12 | 显示全部楼层
第二段与第三段的唯一区别在:c.Offset(0, 1).Value = "=人员!B3 "

既然第二段已是:c.Offset(0, 1).Value = "=人员!B2 "

那么第三段就不应该有,或者第二段就不要!
回复

使用道具 举报

发表于 2014-7-4 19:14 | 显示全部楼层
发上代码,你自己处理下二、三段吧!
  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  2. If Target.Cells(1, 1).Column = 1 Then
  3.     Dim c As Range
  4.     For Each c In Target
  5.         If c.Column = 1 Then
  6.             If c.Value = "" Then
  7.                 c.Offset(0, 1).Value = ""
  8.             Else
  9.                 c.Offset(0, 1).Value = Format(Now, "yyyy-mm-dd hh:mm:ss")
  10.             End If
  11.         End If
  12.     Next
  13. ElseIf Target.Cells(1, 1).Column = 8 Then
  14.     Dim c As Range
  15.     For Each c In Target
  16.         If c.Column = 8 Then
  17.             If c.Value = "" Then
  18.                 c.Offset(0, 1).Value = ""
  19.             Else
  20.                 c.Offset(0, 1).Value = "=人员!B2 "        '这里引用的是人员!B2 的内容,但在表格中会显示公式=人员!B2,应该改成显示值
  21.             End If
  22.         End If
  23.     Next
  24. ElseIf Target.Cells(1, 1).Column = 8 Then
  25.     Dim c As Range
  26.     For Each c In Target
  27.         If c.Column = 8 Then
  28.             If c.Value = "" Then
  29.                 c.Offset(0, 1).Value = ""
  30.             Else
  31.                 c.Offset(0, 1).Value = "=人员!B3 "        '这里引用的是人员!B2 的内容,但在表格中会显示公式=人员!B2,应该改成显示值
  32.             End If
  33.         End If
  34.     Next
  35. End If
  36. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-7-4 19:35 | 显示全部楼层
su45 发表于 2014-7-4 19:12
第二段与第三段的唯一区别在:c.Offset(0, 1).Value = "=人员!B3 "

既然第二段已是:c.Offset(0, 1).Va ...

请你帮我整理一下吧,我还是看不懂这些,我上传有原件的,不知有没有时间呢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 14:16 , Processed in 0.522611 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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