Excel精英培训网

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

su45 麻烦再次帮忙修改代码

[复制链接]
发表于 2014-10-1 23:19 | 显示全部楼层 |阅读模式
10学分
本帖最后由 ht094156 于 2014-10-3 23:46 编辑

这是原贴http://www.excelpx.com/thread-332386-1-1.html
VBA意思:
M列打√必须按顺序从N1--N2---N3来打,就是说假如N1在没有打√的情况下,是不允许N2打√的
但是,你一定要在N1单元格没打√的情况下,去N2处打√,就必须要在L1的位置填写数据才能打√(这个作用是用来填写信息,为什么N1不出仓)
两个条件中,只要符合一个都可以不按顺序打
代码中的红色字体是我修改过的,如果按下面的代码来运行,L列每一行必须都要有数据才可以打√,是不那里错了,可以改吗
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal T As Range)
If Sh.Name = "总表" Then Exit Sub
If Sh.Name = "数据提取" Then Exit Sub
Application.EnableEvents = False
    If T.Column = 8 And T.Row > 4 And T.Count = 1 Then
        If T.Value = "" Then
            T.Offset(0, 1).Value = ""
        Else
            T.Offset(0, 1).Value = Sheets("人员").[d1]
        End If
    ElseIf T.Column = 14 And T.Row > 4 Then
        If T.Count > 1 Then
            For Each c In T
                If c = "" Then Range(c.Offset(, 1), c.Offset(, 2)) = ""
            Next
        Else
            If T = "" Then
                Range(T.Offset(, 1), T.Offset(, 2)) = ""
            Else
                T.Offset(0, 1) = Format(Now, "yyyy-mm-dd hh:mm:ss")
                T.Offset(0, 2) = Sheets("人员").[d2]
                n = T.Row - 4
                If n <= 4 Then n = n - 1
                If n > 4 Then n = 3
                If n > 0 Then
                    For i = 1 To n
                        If T.Offset(-1 * i, 0) <> "√" Then
                            If T.Offset(-1, -2) = "" Then
                                MsgBox "不符合要求!"
                                T = ""
                                T.Offset(0, 1) = ""
                                T.Offset(0, 2) = ""
                                Exit For
                            End If
                        End If
                    Next
                End If
            End If
        End If
    End If
Application.EnableEvents = True
End Sub

发表于 2014-10-2 01:07 | 显示全部楼层
因在外地,手机不方便,有机会再给你看下。

另,你写了那么多 N 是不是错了,因是M吧?
回复

使用道具 举报

 楼主| 发表于 2014-10-2 07:01 | 显示全部楼层
su45 发表于 2014-10-2 01:07
因在外地,手机不方便,有机会再给你看下。

另,你写了那么多 N 是不是错了,因是M吧?

那一列都无所谓,我会改为现在实际用的,大概意思你应该明白吧,你有时间就帮我看看吧,国庆快乐
回复

使用道具 举报

发表于 2014-10-3 19:28 | 显示全部楼层
咱记得你说,即使上面没打勾,只要K列有数据,也应可以打勾的!
所以才有 If T.Offset(, -3) = "" 这句代码的,你到底想怎样?说清楚!
回复

使用道具 举报

发表于 2014-10-3 19:34 | 显示全部楼层
咱说下你原来的意思是:
当上三格内有没打勾的,则该行不能打勾;当上三格中有没打勾的,但本行的K列有数据也允许打勾。

是这样吗?如果是,那么这段代码就没问题!
回复

使用道具 举报

 楼主| 发表于 2014-10-3 22:13 | 显示全部楼层
su45 发表于 2014-10-3 19:34
咱说下你原来的意思是:
当上三格内有没打勾的,则该行不能打勾;当上三格中有没打勾的,但本行的K列有数据 ...

我想改成这样  If T.Offset(-1, -2) = "" Then
当上三格内有没打勾的,则该行不能打勾;当上三格中有没打勾的,但本行的K列(改成本行上一个单元格,K列有数据时)有数据也允许打勾。
这样明白吗,本来是本行的K列,但要改成本行的K列(如本行是19,则在K列18的位置有数据就可以打钩)
回复

使用道具 举报

发表于 2014-10-3 22:16 | 显示全部楼层
ht094156 发表于 2014-10-3 22:13
我想改成这样  If T.Offset(-1, -2) = "" Then
当上三格内有没打勾的,则该行不能打勾;当上三格中有没打 ...

既然都有想法了,应该自己改改多调戏就知道应该怎么虐待它们了
回复

使用道具 举报

发表于 2014-10-3 22:35 | 显示全部楼层
咱说明下,按这组代码, If T.Offset(-1, -2) = "" Then 是说上行 L 列=空
回复

使用道具 举报

发表于 2014-10-3 22:38 | 显示全部楼层
咱还认为是咱的代码不对,原来是你改变了位置呀!搞得咱还在一句句地查看代码,辛苦呀!
回复

使用道具 举报

 楼主| 发表于 2014-10-3 23:41 | 显示全部楼层
su45 发表于 2014-10-3 22:38
咱还认为是咱的代码不对,原来是你改变了位置呀!搞得咱还在一句句地查看代码,辛苦呀!

真不好意思,这在这样可以解决吗,改位置后,代码也要换一下才行吧
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 21:31 , Processed in 0.258747 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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