2014-02-28 35 views
3

的特定細胞我是比較新的VBA。清空同一行的修正細胞

下面是我的代碼,適用於只是排2.

Option Explicit 

    Public precedent 

    Private Sub Worksheet_Change(ByVal Target As Range) 
     If Not Intersect(Target, Me.[D2]) Is Nothing Then 
      If Me.precedent <> Me.[D2].Value Then 
       Me.[F2] = "" 
       Me.[H2] = "" 
       Me.precedent = Me.[D2].Value 
      End If 
     End If 
    End Sub 

我想這個代碼,除了第1行的每一行上運行,因爲這是我的頭。

我該怎麼做?我會用循環嗎?

+0

不,一環是不是一個解決方案。只需檢查「Target」的列索引。如果是4,然後刪除F和H – Manhattan

回答

4

它不應該那麼複雜。只需檢查Target.RowTarget.Column。如果前者大於1,後者等於4,則觸發所需的任何操作。

相應地修改下面的代碼。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Row > 1 And Target.Column = 4 Then 
     Range("F" & Target.Row) = vbNullString 
     Range("H" & Target.Row) = vbNullString 
    End If 
End Sub 

讓我們知道這是否有幫助。

+0

非常感謝你,這是偉大的代碼,完美的作品......謝謝。 –

+0

+1 short and clear :) –

-1

我認爲你需要這一個:

Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Column <> 4 Then Exit Sub 

    If Me.Cells(Target.Row, 4) = "" Then 
     Me.Cells(Target.Row, 6) = "" 
     Me.Cells(Target.Row, 8) = "" 
    End If 
End Sub 
+1

這將清除他不想做,不會遺漏行1,這是一個要求列d。 – thunderblaster

1

你就不必使用循環。既然你想省略第一行,你應該設置一個你希望這段代碼在修改時觸發的範圍。目前,您只是針對D2進行檢查。當你的If語句檢查你的整個範圍內,你就可以使用Target作爲改變特定小區

下面是一些代碼,應該做你想要什麼(而不是使用D2):

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rangeToCheck As Range 
rangeToCheck = Range(Cells(2,4),Cells(Application.ActiveSheet.UsedRange.Rows.Count,4)) 'If your range isn't dynamic, you could put static numbers here 
    If Not Intersect(Target, rangeToCheck) Is Nothing Then 'Now checks against all of Column D, omitting Row 1 
     If Target.precedent <> Target.Value Then 
      Target.Offset(0,2).Value = "" 'Clear Column F in Target Row 
      Target.Offset(0,4).Value = "" 'Clear Column H in Target Row 
      Target.precedent = Target.Value 
     End If 
    End If 
End Sub 
0

下面是代碼,將跳過第1行注的.Row和.COLUMN性「目標」

Option Explicit 

Public precedent 
Private Sub Worksheet_Change(ByVal Target As Range) 
Debug.Print Target.Column 
Debug.Print Target.Row 
    If Target.Row <> 1 Then 
     If Not Intersect(Target, Me.[D2]) Is Nothing Then 
      If Me.precedent <> Me.[D2].Value Then 
       Me.[F2] = "" 
       Me.[H2] = "" 
       Me.precedent = Me.[D2].Value 
      End If 
     End If 
    End If 
End Sub