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
遇到错误跳转,虽然代码很少,但这是遇到所有的错误都会跳转
如果有是处理结果时遇到错误时,我们是不能让他跳转的,不然结果错了,你也不知道
下面是代码的解释,把单词分开来看,看懂每个的意思了,再组合到一起,就简单了!
- Private Sub Worksheet_Change(ByVal Target As Range)
- ' On Error GoTo 100
- Dim Mrow1 As Integer, Mrow2 As Integer, Mcol As Integer
- 'Target = 当前操作单元格
- 'row = 行
- 'column = 列
-
- Mrow1 = Target.Row '提取当前操作单元的行
- If Target.Column = 1 And Len(Target) > 0 Then '如果操作的是 第一列,并且 单元格中没有字符
- '如果操作的是一个单元格区域,这里会报错
- Mrow2 = Range("H:H").Find(Target).Row '在 H 列中查找 当前操作单元格里内容的,并且返回他所在行
- '如果操作的是一个单元格区域,这里会报错误
- '如果没有找到对应的内容,也会报错误
-
- Mcol = Range("i" & Mrow2).Interior.ColorIndex '提取 单元格的颜色
- '这里可以改为
- Set c = Range("H:H").Find(Target) '使用一个变量来读取这个查找的对像
- '如果找到有,C 就不会是 nothing ,所以用个判断,可以防止后面的错误
- If Not c Is Nothing Then '如果存在,就读取单元格的颜色,并应用这个颜色
- Mcol = c.Interior.ColorIndex
- Range(Cells(Mrow1, 1), Cells(Mrow1, 3)).Interior.ColorIndex = Mcol
- End If
- Else
- Range(Cells(Mrow1, 1), Cells(Mrow1, 3)).Interior.ColorIndex = 0
- End If
- End Sub
复制代码