Excel精英培训网

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

[已解决]关于target的问题求助!

[复制链接]
发表于 2012-9-28 11:00 | 显示全部楼层 |阅读模式
见过很多的代码 ,MROW1 = target.Row
出现过很多的 “target”,谁能详细解释下 “target”的意义,怎么运用的呢!?
最佳答案
2012-9-29 10:24
hanyu286613818 发表于 2012-9-28 11:25
我 有一段代码 谁能帮我重点 解释下里面的含义啊 包含 target我想这段代码 我能理解了,估计就通了,忘大 ...

对于事件的应用,若非必要,一般都需要在代码最前面添加一个判断
if target.count>1 then exit sub
也就是先判断操作的是不是一个单元格,如果不是,则不执行后面的代码

对于操作的是一个单元格区域,我们也需要执行后面的代码怎么办?
最基本的方法是用 for each 循环来遍历所有的单元格,在里面查找单元格信息,有没有符合执行条件的单元格被操作过

例如
for each t in target
   if t.column=1 then msgbox "第一列中的单元格被操作过!"
next

这样,我们可以不需要使用 On Error GoTo 100  
遇到错误跳转,虽然代码很少,但这是遇到所有的错误都会跳转
如果有是处理结果时遇到错误时,我们是不能让他跳转的,不然结果错了,你也不知道

下面是代码的解释,把单词分开来看,看懂每个的意思了,再组合到一起,就简单了!

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. ' On Error GoTo 100
  3. Dim Mrow1 As Integer, Mrow2 As Integer, Mcol As Integer
  4.     'Target = 当前操作单元格
  5.     'row  = 行
  6.     'column = 列
  7.    
  8.     Mrow1 = Target.Row  '提取当前操作单元的行
  9.   If Target.Column = 1 And Len(Target) > 0 Then     '如果操作的是 第一列,并且 单元格中没有字符
  10.     '如果操作的是一个单元格区域,这里会报错
  11.        Mrow2 = Range("H:H").Find(Target).Row    '在 H 列中查找 当前操作单元格里内容的,并且返回他所在行
  12.        '如果操作的是一个单元格区域,这里会报错误
  13.        '如果没有找到对应的内容,也会报错误
  14.       
  15.        Mcol = Range("i" & Mrow2).Interior.ColorIndex    '提取 单元格的颜色
  16.        '这里可以改为
  17.        Set c = Range("H:H").Find(Target)   '使用一个变量来读取这个查找的对像
  18.        '如果找到有,C 就不会是 nothing ,所以用个判断,可以防止后面的错误
  19.        If Not c Is Nothing Then     '如果存在,就读取单元格的颜色,并应用这个颜色
  20.         Mcol = c.Interior.ColorIndex
  21.         Range(Cells(Mrow1, 1), Cells(Mrow1, 3)).Interior.ColorIndex = Mcol
  22.        End If
  23.   Else
  24.    Range(Cells(Mrow1, 1), Cells(Mrow1, 3)).Interior.ColorIndex = 0
  25.   End If
  26. End Sub
复制代码
发表于 2012-9-28 11:04 | 显示全部楼层
target,表示当前选中的单元格区域。

建议在论坛中搜索“target”,有很多对此的理解和运用实例。
回复

使用道具 举报

 楼主| 发表于 2012-9-28 11:06 | 显示全部楼层
爱疯 发表于 2012-9-28 11:04
target,表示当前选中的单元格区域。

建议在论坛中搜索“target”,有很多对此的理解和运用实例。

恩  谢谢  我之前没搜索到,后来有突然搜索到了 晕!正在使用或者编辑的当前单元格或者区域 可以这么说吗?
回复

使用道具 举报

发表于 2012-9-28 11:13 | 显示全部楼层
target是工作表事件中的一个变量, 是表示单元格的,在工作表选中事件中表示当前选中的单元格,在工作表改变事件中表示当前改变的单元格,不在事件过程没有用.
比如:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
回复

使用道具 举报

发表于 2012-9-28 11:22 | 显示全部楼层
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     MsgBox "Selection:" & Selection.Address(0, 0) & vbCrLf & _
  3.            "   Target:" & Target.Address(0, 0)
  4. End Sub
复制代码
工作簿2.rar (7.83 KB, 下载次数: 1)
回复

使用道具 举报

 楼主| 发表于 2012-9-28 11:25 | 显示全部楼层
爱疯 发表于 2012-9-28 11:22
这例子说明这里target相当于selection,Selection 属性返回代表活动工作簿中活动工作表上的当前选定区域 ...

我 有一段代码 谁能帮我重点 解释下里面的含义啊 包含 target

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. ' On Error GoTo 100
  3. Dim Mrow1 As Integer, Mrow2 As Integer, Mcol As Integer
  4.     Mrow1 = Target.Row
  5.   If Target.Column = 1 And Len(Target) > 0 Then
  6.        Mrow2 = Range("H:H").Find(Target).Row
  7.        Mcol = Range("i" & Mrow2).Interior.ColorIndex
  8.        Range(Cells(Mrow1, 1), Cells(Mrow1, 3)).Interior.ColorIndex = Mcol
  9.   Else
  10.    Range(Cells(Mrow1, 1), Cells(Mrow1, 3)).Interior.ColorIndex = 0
  11.   End If
  12. Exit Sub
  13. 100:
  14.   Range(Cells(Mrow1, 1), Cells(Mrow1, 3)).Interior.ColorIndex = 0
  15. End Sub
复制代码
我想这段代码 我能理解了,估计就通了,忘大家指导啊
回复

使用道具 举报

发表于 2012-9-28 11:31 | 显示全部楼层
target.row
表示所选单元格区域的行号

Target.Column = 1
表示所选择的列号等于1,意味选择的是A列

Len(Target)
选择的单元格的字符数目,如果这个数目大于0,意味输入了字符
回复

使用道具 举报

发表于 2012-9-29 10:24 | 显示全部楼层    本楼为最佳答案   
hanyu286613818 发表于 2012-9-28 11:25
我 有一段代码 谁能帮我重点 解释下里面的含义啊 包含 target我想这段代码 我能理解了,估计就通了,忘大 ...

对于事件的应用,若非必要,一般都需要在代码最前面添加一个判断
if target.count>1 then exit sub
也就是先判断操作的是不是一个单元格,如果不是,则不执行后面的代码

对于操作的是一个单元格区域,我们也需要执行后面的代码怎么办?
最基本的方法是用 for each 循环来遍历所有的单元格,在里面查找单元格信息,有没有符合执行条件的单元格被操作过

例如
for each t in target
   if t.column=1 then msgbox "第一列中的单元格被操作过!"
next

这样,我们可以不需要使用 On Error GoTo 100  
遇到错误跳转,虽然代码很少,但这是遇到所有的错误都会跳转
如果有是处理结果时遇到错误时,我们是不能让他跳转的,不然结果错了,你也不知道

下面是代码的解释,把单词分开来看,看懂每个的意思了,再组合到一起,就简单了!

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. ' On Error GoTo 100
  3. Dim Mrow1 As Integer, Mrow2 As Integer, Mcol As Integer
  4.     'Target = 当前操作单元格
  5.     'row  = 行
  6.     'column = 列
  7.    
  8.     Mrow1 = Target.Row  '提取当前操作单元的行
  9.   If Target.Column = 1 And Len(Target) > 0 Then     '如果操作的是 第一列,并且 单元格中没有字符
  10.     '如果操作的是一个单元格区域,这里会报错
  11.        Mrow2 = Range("H:H").Find(Target).Row    '在 H 列中查找 当前操作单元格里内容的,并且返回他所在行
  12.        '如果操作的是一个单元格区域,这里会报错误
  13.        '如果没有找到对应的内容,也会报错误
  14.       
  15.        Mcol = Range("i" & Mrow2).Interior.ColorIndex    '提取 单元格的颜色
  16.        '这里可以改为
  17.        Set c = Range("H:H").Find(Target)   '使用一个变量来读取这个查找的对像
  18.        '如果找到有,C 就不会是 nothing ,所以用个判断,可以防止后面的错误
  19.        If Not c Is Nothing Then     '如果存在,就读取单元格的颜色,并应用这个颜色
  20.         Mcol = c.Interior.ColorIndex
  21.         Range(Cells(Mrow1, 1), Cells(Mrow1, 3)).Interior.ColorIndex = Mcol
  22.        End If
  23.   Else
  24.    Range(Cells(Mrow1, 1), Cells(Mrow1, 3)).Interior.ColorIndex = 0
  25.   End If
  26. End Sub
复制代码

评分

参与人数 1 +20 金币 +20 收起 理由
爱疯 + 20 + 20 超细心的解释

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 10:20 , Processed in 0.372271 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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