Excel精英培训网

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

[已解决]VBA代码自动运行优化

[复制链接]
发表于 2014-11-30 17:21 | 显示全部楼层 |阅读模式
请教下下面的代码为什么不自动运行,还有如何优化,我刚学这个,不太懂,谢谢。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 1 And Target.Count = 1 Then
  For i = 4 To Range("E1000").End(xlUp).Row
      d = Cells(i, 4)
      e = Cells(i, 5)
  
         If e <> "" Then
           If d = "怡纯,350ml,1×24" Then
             k = 84
             ElseIf d = "怡纯,555ml,1×12[彩膜]" Then
             k = 110
             ElseIf d = "怡纯,555ml,1×24" Then
             k = 70
             ElseIf d = "怡纯,1555ml,1×12" Then
             k = 44
             ElseIf d = "怡纯,4500ml,1×4" Then
             k = 36
             Else
             k = 0
          End If
                If e < k Then
                Cells(i, 8) = e & "箱"
                Else
                Cells(i, 8) = VBA.Int(e / k) & "托" & e Mod k & "箱"
                End If
         End If
         
  Next i

End If
End Sub

最佳答案
2014-12-1 19:22
vhanhong 发表于 2014-12-1 17:02
用VBA代替公式,单元格内容改变自动运行,谢谢

XX提货2014-11-1 - 副本.rar (18.73 KB, 下载次数: 19)
发表于 2014-11-30 17:50 | 显示全部楼层
这是工作表的change事件,当单元格内容改变时才触发,看你条件,只要不是第一列的单个单元格改变就能触发这个事件
回复

使用道具 举报

 楼主| 发表于 2014-12-1 12:45 | 显示全部楼层
qh8600 发表于 2014-11-30 17:50
这是工作表的change事件,当单元格内容改变时才触发,看你条件,只要不是第一列的单个单元格改变就能触发这 ...

对的,就是想单元格内容改变的时候就自动运行,但是现在这个好像有点问题,不能运行。主代码好像也有问题
回复

使用道具 举报

发表于 2014-12-1 15:02 | 显示全部楼层
vhanhong 发表于 2014-12-1 12:45
对的,就是想单元格内容改变的时候就自动运行,但是现在这个好像有点问题,不能运行。主代码好像也有问题 ...

上传附件
回复

使用道具 举报

 楼主| 发表于 2014-12-1 17:02 | 显示全部楼层
qh8600 发表于 2014-12-1 15:02
上传附件

用VBA代替公式,单元格内容改变自动运行,谢谢

1111.rar

20.32 KB, 下载次数: 1

回复

使用道具 举报

发表于 2014-12-1 19:22 | 显示全部楼层    本楼为最佳答案   
vhanhong 发表于 2014-12-1 17:02
用VBA代替公式,单元格内容改变自动运行,谢谢

XX提货2014-11-1 - 副本.rar (18.73 KB, 下载次数: 19)
回复

使用道具 举报

发表于 2014-12-1 19:23 | 显示全部楼层
vhanhong 发表于 2014-12-1 17:02
用VBA代替公式,单元格内容改变自动运行,谢谢

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim arr(1 To 5, 1 To 2), i
    x = Cells(Target.Row, 5)
    arr(1, 1) = "怡纯,350ml,1×24": arr(1, 2) = 84
    arr(2, 1) = "怡纯,555ml,1×12[彩膜]": arr(2, 2) = 110
    arr(3, 1) = "怡纯,555ml,1×24": arr(3, 2) = 70
    arr(4, 1) = "怡纯,1555ml,1×12": arr(4, 2) = 44
    arr(5, 1) = "怡纯,4500ml,1×4": arr(5, 2) = 36
    If Target.Row > 3 And (Target.Column = 4 Or Target.Column = 5) Then
        For i = 1 To UBound(arr)
            If x <> "" Then
                If Cells(Target.Row, 4) = arr(i, 1) Then
                    If x \ arr(i, 2) = 0 Then
                        Cells(Target.Row, 6) = x Mod arr(i, 2) & "箱"
                    Else
                        Cells(Target.Row, 6) = x \ arr(i, 2) & "托" & x Mod arr(i, 2) & "箱"
                    End If
                    Exit For
                End If
            End If
        Next
    End If
End Sub
在第4,5列,单元格触发事件
回复

使用道具 举报

 楼主| 发表于 2014-12-2 08:07 | 显示全部楼层
qh8600 发表于 2014-12-1 19:23
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim arr(1 To 5, 1 To 2), i
    x = Cells ...

感谢大神,完全满足我的使用需求,不过可以帮忙做个注释吗?我对数组不是很了解。谢谢
回复

使用道具 举报

发表于 2014-12-2 08:31 | 显示全部楼层
vhanhong 发表于 2014-12-2 08:07
感谢大神,完全满足我的使用需求,不过可以帮忙做个注释吗?我对数组不是很了解。谢谢

建议把规则做在表里,这样是直接给数组赋值,多了就麻烦了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 08:18 , Processed in 0.807230 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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