2017-03-14 28 views
1

「入力/クリック」ボタンを使用してUser_Formからデータを入力すると、日付や時刻を自動化する方法はありますか?私はこのコードを試しましたが、それは私のExcelワークブックを再開し続けます。その上に、私は他のコードのトンを持っていますPrivate Sub Worksheet_Change(ByVal Target As Range)自動日付ユーザフォームデータを入力した後に入力

それは可能性があります過負荷ですか?

私はUserform_click()でコード化できると思っています。

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim i As Integer 

For i = 16 To 100 
    If Cells(i, 3).Value <> "" Then 
     Cells(i, 1).Value = Date & " " 
     Cells(i, 1).NumberFormat = "mm/dd/yy" 
    End If 
Next 

End Sub 
+2

ハンドラは再帰的であり、脱出できません。ハンドラは、セルが変更されるたびに実行され、セルを変更してハンドラを再び実行します。セルを変更すると、ハンドラが再び実行され、最終的にコールスタックが吹き飛ばされ、すべてが炎上します。 –

答えて

1

あなたはそれ以外の場合はそれを価値は(あなたがFor i = 16 To 100ループ内でそれを変更したときなど)、ワークシート内で変更されるたびに実行し続けるだろう、あなたのSubの初めにApplication.EnableEvents = Falseを追加する必要があります。

コード

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim i As Integer 

Application.EnableEvents = False 

For i = 16 To 100 
    If Cells(i, 3).Value <> "" Then 
     Cells(i, 1).Value = Date & " " 
     Cells(i, 1).NumberFormat = "mm/dd/yy" 
    End If 
Next i 
Application.EnableEvents = True '<-- restore to original setting 

End Sub 

編集1:あなたは、セルが検索Range("C16:C100")内で変更された場合にのみ、それはそれに入ること、別の方法であなたのSubを書くことができます。変更されたセルがその範囲内にある場合のみ、Value <> ""がある場合は各セルをチェックします。

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim C As Range 

Application.EnableEvents = False 
If Not Intersect(Range("C16:C100"), Target) Is Nothing Then 
    For Each C In Intersect(Range("C16:C100"), Target) 
     If C.Value <> "" Then 
      C.Offset(, -2).Value = Date & " " 
      C.Offset(, -2).NumberFormat = "mm/dd/yy" 
     End If 
    Next C 
End If 
Application.EnableEvents = True 

End Sub 
+0

ありがとうございます!それはうまくいった! –

関連する問題