Excel精英培训网

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

关于Worksheet_Change

[复制链接]
发表于 2015-9-11 09:52 | 显示全部楼层 |阅读模式
我的想法:当输入商品号后(实际工作时用扫描器扫的),在”数量“一列默认输入数字1。
于是,我编写程序:
——————————————————
Private Sub Worksheet_Change(ByVal Target As Range)
    If (Target.Column() = 1 And Not IsEmpty(Target)) Then
            Cells(Target.Row(), 2) = 1
    End If
End Sub
——————————————————————————
输入时没有错误。但是,工作中有时把商品号输错了或者是用户不要某商品了,我选中该行或多行,按DEL键删除,选中的最顶行的”数量“列仍为1。不明白为什么,请高人赐教!
”有附件“

ttt.rar

5.85 KB, 下载次数: 8

发表于 2015-9-11 10:04 | 显示全部楼层
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Not Intersect(Target, Range("a2:a65536")) Is Nothing Then
  3.         Dim rg As Range
  4.             For Each rg In Intersect(Target, Range("a2:a65536"))
  5.                 If rg <> "" Then
  6.                 rg.Offset(, 1) = 1
  7.                 Else
  8.                 rg.Offset(, 1) = ""
  9.                 End If
  10.             Next rg
  11.     End If
  12. End Sub
复制代码

ttt.rar

8.31 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2015-9-11 10:16 | 显示全部楼层
我想知道我做的为什么会出现这种现象!
回复

使用道具 举报

发表于 2015-9-11 10:27 | 显示全部楼层
你的程序,识别到 target is empty后,就直接end sub了,不会将后面的1删除
回复

使用道具 举报

发表于 2015-9-11 10:30 | 显示全部楼层
不明白“按DEL键删除,选中的最顶行的”数量“列仍为1。”,是什么意思?

按DEL键删除,应该是怎样的效果?
回复

使用道具 举报

 楼主| 发表于 2015-9-11 10:35 | 显示全部楼层
yorkchenshunan 发表于 2015-9-11 10:27
你的程序,识别到 target is empty后,就直接end sub了,不会将后面的1删除

这个我能明白。如果我只选中“商品号”那一列的数据,按DEL,B列当然不会被删除。可是,我选择的是整行,然后按DEL。
您试试,如果选择3行,按DEL,后2行全删了,就是第1行的B列还是1
回复

使用道具 举报

发表于 2015-9-11 10:52 | 显示全部楼层
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 Then
        If Target.Column = 1 Then
            If Target.Offset(0, 1) = "" Then
                Cells(Target.Row, 2) = 1
            End If
        End If
    End If
End Sub
回复

使用道具 举报

发表于 2015-9-11 11:06 | 显示全部楼层
office83 发表于 2015-9-11 10:35
这个我能明白。如果我只选中“商品号”那一列的数据,按DEL,B列当然不会被删除。可是,我选择的是整行, ...

这个我能明白。如果我只选中“商品号”那一列的数据,按DEL,B列当然不会被删除。可是,我选择的是整行,然后按DEL。
您试试,如果选择3行,按DEL,后2行全删了,就是第1行的B列还是1

我举例说明吧,假设你选中ROW(6:8),然后DELETE,
VB里会认为,target.row=6, target.column=1, target.rows.count=3,  target.columns.count=256,target是一个区域而非单一单元格,因此 IsEmpty(target)=false,
那么回头看看你编写的事件,target.column=1满足,not isempty(target)= true,因此执行Cells(Target.Row(), 2) = 1, 即CELLS(6,2)=1,而除了CELLS(6,2)外,row(6:8)区域内其他单元格都因为你的DELETE变成了空

回复

使用道具 举报

 楼主| 发表于 2015-9-11 11:19 | 显示全部楼层
yorkchenshunan 发表于 2015-9-11 11:06
这个我能明白。如果我只选中“商品号”那一列的数据,按DEL,B列当然不会被删除。可是,我选择的是整行, ...

您解释的太清楚了!太谢谢您了。
回复

使用道具 举报

发表于 2015-9-11 11:33 | 显示全部楼层
office83 发表于 2015-9-11 11:19
您解释的太清楚了!太谢谢您了。

如果问题已经解决,请选择一个最佳答案结贴,谢谢。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 11:49 , Processed in 0.412645 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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