2017-12-18 6 views
-1

売上のリストを含むスプレッドシートがあります。最初のセルを更新した後に別のセルを強制的に更新する

ユーザーが[ステータス]列を[閉鎖]に設定すると、[閉鎖日]列に日付を入力する必要があります。

だから私はこれを持っています。

A1 (Status), B1 (Closed Date) 
Open, <blank> 
Open, <blank> 
Closed, 1/1/2018 

アンディが言ったことを1としてオリー

+1

あなたは何を試みましたか?これはコード作成サービスではありません。 –

+0

私が正直であれば、私はどこから始めるべきか分からない。私は前に多くのマクロをやったことはありません。いくつかのヒントや指示/アドバイスを期待していた。 –

+1

Changeイベントを調べることはできますが、この要件を強制したい場合はBeforeSaveが可能性が高くなります。 –

答えて

1

はSOは、コードの書き込みサービスではありません。 Macro-Enabled Workbookとしてopened code windowsaveワークブックに下記の>View codepaste the code - しかし、Sheet Tab

Right click ...あなたは以下の手順に従ってから開始する場所については考えている、あなたの出発点を提供することを検討。

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.CountLarge > 1 Then Exit Sub 
If Target.Column = 1 And Target.Row > 1 Then 
    If Target <> "" And LCase(Target.Value) = "closed" Then 
     With Target.Offset(0, 1) 
      .Select 
      On Error Resume Next 
      .Comment.Delete 
      On Error GoTo 0 
      .AddComment.Text "Please enter the Closed Date" 
      .Comment.Visible = True 
     End With 
    Else 
     On Error Resume Next 
     Target.Offset(0, 1).Comment.Delete 
     On Error GoTo 0 
    End If 
ElseIf Target.Column = 2 And Target.Row > 1 Then 
    If LCase(Target.Offset(0, -1)) = "closed" And IsDate(Target) Then 
     Target.Comment.Delete 
    End If 
End If 
End Sub 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Target.CountLarge > 1 Then Exit Sub 
Dim x 
Dim i As Long, lr As Long 

Application.ScreenUpdating = False 
Application.EnableEvents = False 

lr = Cells(Rows.Count, 1).End(xlUp).Row 
x = Range("A2:B" & lr) 

If Target <> "" Then 
    Application.EnableEvents = True 
    Exit Sub 
End If 

For i = 1 To UBound(x, 1) 
    If LCase(x(i, 1)) = "closed" And Not IsDate(x(i, 2)) Then 
     Cells(i + 1, 2).Select 
     Exit For 
    End If 
Next i 

Application.EnableEvents = True 
Application.ScreenUpdating = True 
End Sub 
関連する問題