2015-05-23 87 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