2015-05-23 91 views
0

我想清除柱CDE细胞的含量(日期= Sheet 1中!C2)所以日期是从片材1但来自不同小区,不同行 Sample xls file更改细胞以清除其他细胞

这是我做的,但它不是工作,直到手动更改日期在列B表2:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Not Intersect(Target, Range("b1:b100")) Is Nothing Then 
    Cells(Target.Row, 3) = "" 
    Cells(Target.Row, 4) = "" 
    Cells(Target.Row, 5) = "" 
End If 
End Sub 
+0

查看Worksheet_Change事件及其Target参数。 –

+0

@Doug Glancy这是我做的,但它不工作,直到手动更改C列中的日期2工作表Private Sub Worksheet_Change(ByVal目标作为范围) 如果不相交(目标,范围(“b1:b100”))然后 细胞(Target.Row,3)= “” 细胞(Target.Row,4)= “” 细胞(Target.Row,5)= “” 结束如果结束 子 –

+0

由于日期中列** B **通过*公式输入*您需要使用* Calculate *事件来捕捉更改。 –

回答

2

这是一个非常简单,有限的例子。我们只监视包含公式的单元格B5。式检索来自另一个工作表的日期:

enter image description here

在用于这个片我们安装以下事件宏工作表代码区:

Private Sub Worksheet_Calculate() 
    Dim Monitor As Range, Helper As Range 
    Dim rw As Long 
    Set Monitor = Range("B5") 
    Set Helper = Range("H5") 
    rw = Monitor.Row 

    Application.EnableEvents = False 
     If Helper.Value = "" Then 
      Helper.Value = Monitor.Value 
     Else 
     If Helper.Value <> Monitor.Value Then 
      Helper.Value = Monitor.Value 
      Range("C" & rw & ":E" & rw).ClearContents 
     End If 
     End If 
    Application.EnableEvents = True 
End Sub 

代码使用细胞H5为“助手“代码第一次运行时,辅助单元被填充。每一次之后,代码比较“助手”对H5。如果他们变得不同,细胞Ç该行ê被清除。

因为它是工作表的代码,这是非常容易安装和自动使用:

  1. 右键单击靠近Excel窗口底部的标签名称
  2. 选择查看代码 - 这带来了一个VBE窗口
  3. 粘贴的东西并关闭VBE窗口

如果您有任何问题,首先尝试在一个审判工作。

如果保存工作簿,宏将与其一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件保存为.xlsm而非 。XLSX

要删除宏:

  1. 弹出VBE窗口如上
  2. 清晰的代码进行
  3. 关闭VBE窗口

要了解更多关于宏一般,参见:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解更多有关事件宏(工作表的代码),请参阅:

http://www.mvps.org/dmcritchie/excel/event.htm

宏必须为此工作启用!

编辑#1:

完全抛弃原来的宏和安装这一个,而不是:

Private Sub Worksheet_Calculate() 
    Dim Monitor As Range, Helper As Range 
    Dim rw As Long, r As Range 
    Set Monitor = Range("B2:B100") 
    Set Helper = Range("H2:H100") 


    Application.EnableEvents = False 
     For Each r In Helper 
     If r.Value = "" Then 
      r.Value = r.Offset(0, -6).Value 
     End If 
     Next r 

     For Each r In Helper 
     If r.Value <> r.Offset(0, -6).Value Then 
      r.Value = r.Offset(0, -6).Value 
      rw = r.Row 
      Range("C" & rw & ":E" & rw).ClearContents 
     End If 
     Next r 
    Application.EnableEvents = True 
End Sub 

正如你看到的,我们必须遍历的范围内的每个项目。

+0

我可以让这个像私人小组Worksheet_Calculate() 昏暗的显示器作为范围,助手为靶场 昏暗RW只要 设置显示器=范围( “B1:B10”) Set Helper = Range(“H1:H10”) rw = Monitor.Row Application.EnableEven TS =假 如果Helper.Value = “” 然后 Helper.Value = Monitor.Value 否则 如果Helper.Value <> Monitor.Value然后 Helper.Value = Monitor.Value 范围( “C” &RW& “:E”&rw)。clearContents中 结束如果 结束如果 Application.EnableEvents =真 结束小组 –

+0

我的代码,你写的是工作完美,但只在一个小区改变事件是B5,但我有日期 –

+0

一整列在你的日期** B1 **通过** B10 ** –

0

试试这个使用Worksheet_Change事件(见https://msdn.microsoft.com/EN-US/library/office/dn301178.aspx

Private Sub Worksheet_Change(ByVal Target As Range) 
    With Target 
     If .Column = 2 Then 

      Rem Disable Events. So it's not triggered by changes to columns D, E & F 
      Application.EnableEvents = 0 

      Rem Clear Columns D, E & F same row 
      .Cells.Offset(, 2).ClearContents 
      .Cells.Offset(, 3).ClearContents 
      .Cells.Offset(, 4).ClearContents 

      Rem Enable Events after changes 
      Application.EnableEvents = 1 

    End If: End With 
End Sub 
+0

它不工作不清除单元格 –

+0

我刚刚复制并粘贴你在工作表2中的完整代码没有影响 –

+0

看来,事件是关闭 试试这是一个模块 '子App_EnableEvents' 'Application.EnableEvents = 1' '结束sub' – EEM