2017-05-09 12 views
0

열 C-K가 업데이트 될 때 날짜와 시간이 자동으로 채워지도록 열 B가 필요한 스프레드 시트가 있습니다. 업데이트 코드를 실행하지 않으려는 K 이상의 열이 있습니다. 이 행의 변경 사항에 대한 업데이트로VBA 범위 업데이트시 날짜 입력 코드

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim i As Integer 
i = Target.Row 
Dim t As String 
t = VBA.Now 
Cells(i, 2) = t 
End Sub 

이 내 상황에 작동하지 않았다 :

는 첫째로 나는 다음과 같은 코드를 사용했다. 이 이점은 사용자가 VBA가 업데이트 된 날짜를 입력하지 못하도록이 셀을 입력 할 수 없다는 것입니다.

그냥 선택한 행에 대한 트리거를 사용하려면, 다음 코드에 갔다 :

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim KeyCells As Range 
Set KeyCells = Range("C6:K43")  
If Not Application.Intersect(KeyCells, Range(Target.Address)) _ 
    Is Nothing Then 
Dim i As Integer 
    i = Target.Row 

    Dim t As String 
    t = VBA.Now 

    Cells(i, 2) = t 
End If 
End Sub 

이 지금, 그러나, 사용자가 이상 입력 할 수 없습니다 더 이상 작동합니다.

나는 셀 잠금을 시도했지만 VBA는 작동하지 않습니다. 또한 오프셋 수식을 사용하여 시도했지만이 셀의 범위를 하나 이상의 열로 인해 작동하지 않습니다.

내 머리가 찢어지기 전에 어떤 제안이 있습니까 ???

+0

또는 그 코드를 다시 트리거 :

아래 코드를 사용해보십시오. –

+0

http://stackoverflow.com/questions/3037400/how-to-lock-the-data-in-a-cell-in-excel-using-vba이 방법이 도움이 될 것으로 생각합니다. –

답변

0

Target은 이미 Range이므로 Range(Target.Address)을 사용할 필요가 없습니다. 단지 Target을 사용하면됩니다.

또한 @Tim Williams의 의견에 따르면 Application.EnableEventsFalse으로 설정해야합니다. "B"열의 셀에 현재 시간을 추가하면 코드를 다시 입력하지 않아도됩니다. 변경 이벤트 핸들러 내에서 워크 시트를 업데이트 할 때 업데이트를 수행하는 동안, 당신은 이벤트를 해제해야합니다

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim KeyCells As Range 
Set KeyCells = Range("C6:K43") 

Application.EnableEvents = False 
If Not Application.Intersect(KeyCells, Target) Is Nothing Then 
    Range("B" & Target.Row) = Now 
End If 
Application.EnableEvents = True 

End Sub 
+1

좋은 답변 - 'DisplayAlerts'를 정말로 사용하고 있는지 확인하고 계십니까? 그것은'EnableEvents'가 아니어야합니까? – Ambie

+0

@Ambie 좋은 캐치, thanks :) –

+0

위의 코드 주셔서 감사합니다. 그러나이 코드에서 필자가 필요로하는 공식에 대해서는 작동하지만 여전히 B 열에 입력 할 수 있으며이 열에 VBA 날짜 항목이 제거됩니다. 이 주위에 어떤 방법이 있습니까? – Choppet