2013-06-27 8 views
1

두 개 이상의 셀을 동시에 변경할 수 없도록하는 코드가 있습니다. 그러나 한 번에 둘 이상의 셀을 삭제할 수 있습니다. 아래 코드는 제가 사용하고 있으며 잘 작동합니다.참조 Variant Array to Column

Dim vClear As Variant 
Dim vData As Variant 

'This prevents more than one cell from being changed at once. 
'If more than one cell is changed then validation checks will not work. 
If Target.Cells.Count > 1 Then 
    vData = Target.Formula 
    For Each vClear In vData 
     If vClear <> "" Then 'If data is only deleted then more than one cell can be changed. 
      MsgBox "Change only one cell at a time", , "Too Many Changes!" 
       Application.Undo 
       Exit For 
     End If 
    Next 
End If 

데이터를 삭제할 때 내가 추가하려고하는 것은 데이터가 삭제되는 열을 확인하고 싶습니다. 요구 사항을 충족하는 열이 있으면 다른 열의 해당 행에있는 데이터도 함께 삭제해야합니다.

다음은 내가하려는 일의 예입니다. 확인해야하는 열이 두 개 있습니다 (G & H입니다.) 데이터가이 두 열 중 하나에서 삭제 된 경우에도 열 I도 삭제되기를 원합니다. D5 : G10의 범위를 선택하고 그 내용을 삭제한다고 가정 해 봅시다. G 열은 하나의 요구 사항이므로 I5도 삭제해야합니다. 만약 내가 D5 : F10을 삭제한다면 컬럼 G 나 H가 선택되지 않았기 때문에 컬럼 I에서 아무 것도 삭제하지 않을 것입니다.

다음은 내가 수행하려고 시도하는 코드의 예입니다. 나는 아래 코드를 사용하는 것이 불가능하다는 것을 알고있다. 이것은 내가하려는 일에 대한 간략한 요약 일 뿐이며, 또한 변형을 칼럼을 검사하는 방법을 알 수 없다. 누군가가이 작업을 수행하는 방법을 알고 있다면 알려주십시오.

Dim vClear As Variant 
Dim vData As Variant 

'This prevents more than one cell from being changed at once. 
'If more than one cell is changed then validation checks will not work. 
If Target.Cells.Count > 1 Then 
    vData = Target.Formula 
    For Each vClear In vData 
     If vClear <> "" Then 'If data is only deleted then more than one cell can be changed. 
      MsgBox "Change only one cell at a time", , "Too Many Changes!" 
       Application.Undo 
       Exit For 
     Else 
      If vClear = "" Then 
       If vClear.Column = 7 Or vClear.Column = 8 Then 
        ActiveSheet.Cells(vClear.Row, 9) = "" 
       End If 
      End If 
     End If 
    Next 
End If 

답변

1

G 또는 H 열이 대상에 있는지 확인하기 위해 코드를 수정했습니다. 그럴 경우, 열 I의 해당 행도 지워집니다. 또한 For 루프의 Else 부분에서 불필요한 If 테스트를 제거했습니다.

Dim vClear As Variant 
Dim vData As Variant 
Dim firstRow As Long 
Dim lastRow As Long 

'This prevents more than one cell from being changed at once. 
'If more than one cell is changed then validation checks will not work. 
If Target.Cells.Count > 1 Then 
    vData = Target.Formula 
    For Each vClear In vData 
     If vClear <> "" Then 'If data is only deleted then more than one cell can be changed. 
      MsgBox "Change only one cell at a time", , "Too Many Changes!" 
       Application.Undo 
       Exit For 
     Else 
      ' if the target includes columns G or H, we also clear column i 
      If Not Intersect(Target, Columns("G:H")) Is Nothing Then 
       ' get the first row in the target range 
       firstRow = Target.Rows(1).Row 
       ' get the last row in the target range 
       lastRow = firstRow + Target.Rows.Count - 1 
       ' clear contents of corresponding rows in column i 
       ActiveSheet.Range(Cells(firstRow, 9), Cells(lastRow, 9)).ClearContents 
      End If 
     End If 
    Next 
End If 
+0

우수 감사합니다. 이제는 인터 섹트 (Intersect)를 알았습니다. 전에는 들어 본 적이 없었습니다. 코드에서 우수한 주석 진술. 도움을 주셔서 감사합니다. – Chris