2017-09-21 13 views
1

Ich habe bereits einen Code, aber ich möchte wissen, ob dieser Code geändert werden kann oder ob es einen Code gibt, der prüfen kann, ob eine Zelle in der Spalte E leer ist und Inhalt in einer Zelle in Spalte A, wenn das jemand verlässt die ReiheVBA Inhalt löschen

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 5 Then 
    If Target.Value = vbEmpty Then 
     Cells(Target.Row, 1).ClearContents 
    End If 
    End If 
End Sub 
+0

Was meinen Sie mit "Jemand verlässt die Reihe"? Ich habe diesen Code getestet und prüft auf Änderungen in Spalte E. Wenn es in 'vbEmpty' (oder leer) geändert wird, löscht es den Wert in der gleichen Zeile in Spalte A. – Moacir

+0

Wenn ich Sie richtig verstehe: Versuchen Sie' Private Sub Worksheet_SelectionChange' stattdessen. – Jochen

+0

Ich habe bereits einen Code, der das Datum in Spalte A setzt, wenn ich irgendwo in die Zeile klicke. Was ich tun möchte, ist Inhalte zu löschen, wenn nichts in E ist und ich die Reihe verlasse. Momentan löscht der Code nur, wenn ich etwas in E lege und lösche es oder wenn ich es anklicke und versuche zu tippen Ich möchte es überprüfen und sehen, dass alles in E automatisch gelöscht wird, ohne in die Zelle in Spalte E zu gehen und zu löschen, was drin ist die Zelle in Spalte A – MarQuisM

Antwort

0

das erste Bit des Codes prüft, ob Änderungen an der Spalte E die Spalte A löschen

Also müssen wir nur wieder das gleiche tun, aber die Überprüfung wenn Spalte E leer ist, wenn Spalte A geändert wird.

Auf diese Weise, wenn Sie den Wert auf Co ändern lumn A und in der gleichen Zeile ist Spalte E leer, es löscht, was Sie eingegeben haben.

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 5 Then 
     If Target.Value = vbEmpty Then 
      Cells(Target.Row, 1).ClearContents 
     End If 
    Elseif Target.Column = 1 Then 
     If Cells(Target.Row, 5).Value = vbEmpty Then 
      Cells(Target.Row, 1).ClearContents 
     End If 
    End If 
End Sub 

Edit: Also, nach dem Kommentar, hier ist, wie Sie Ihren Code

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 5 Then 
     If Target.Value = vbEmpty Then 
      Cells(Target.Row, 1).ClearContents 
     Else 
      'Insert here whatever code you got on the single click event (Except the sub and end sub) 
     End If 
    Elseif Target.Column = 1 Then 
     If Cells(Target.Row, 5).Value = vbEmpty Then 
      Cells(Target.Row, 1).ClearContents 
     End If 
    End If 
End Sub 
+0

Hallo allerseits der Code, den ich von @Mocair erhalten habe, aber es löscht irgendwie das Einzelklick-Ereignis irgendwo in der Zeile, die ich bereits habe, die das Datum in Spalte A setzt, da kann ich den Code behalten es macht es so, dass ich etwas in die Spalte E für den Code für das Datum, das ich zuvor hatte arbeiten müssen – MarQuisM

+0

Es wird abgebrochen, es sei denn, Spalte E hat Daten darüber. Sonst wird es funktionieren. Sie können denselben Code für das Arbeitsblatt Change verwenden, um den Single-Click-Code auszuführen. Ich bearbeite die Antwort zu zeigen, wo – Moacir

+0

Die Bearbeitung wird überprüfen: Wenn Sie Spalte E in leer ändern, wird es den Wert in Spalte A löschen. Wenn Sie Spalte E zu etwas anderes ISNT leer ändern, wird es den Code ausführen. – Moacir

1

Herausgegeben gemäß DirkReichel Vorschlag diese Formel in A1

hinzufügen verwenden sollten:

=IF(E1="","",IF(LEN(A1),A1,TODAY())) 

Jetzt ziehen Sie es in Ihrer Spalte "A" so weit wie Sie brauchen. Es wird das heutige Datum in Spalte "A" hinzufügen, wenn in Spalte "E" ein Wert vorhanden ist. Andernfalls Spalte „A“ wird leer bleiben

+0

zuerst: warum 'date (Jahr (jetzt()), ...' 'mit der richtigen Formatierung nur' now() 'würde tun (auch' today() ') ... Sekunde: das Datum wird volatil sein ... das Öffnen des wb am nächsten Tag wird alle Daten in der Spalte A in den * tatsächlichen * Tag ändern ... –

+0

@DirkReichel: Yup, du hast Recht, ich hatte 'Today' vergessen, aber wie du schon erwähnt hast, wird das Datum sein Ändern Sie den nächsten Tag, damit dieser Ansatz nicht funktioniert Ich werde meine Antwort entfernen – Zac

+0

Iteration einschalten und für A1 ausführen '= IF (E1 = "" ", IF (LEN (A1), A1, HEUTE())) '(kann kopiert werden);) –

0

Sie versuchen, Informationen der „letzten“ Auswahl bei einem Wechsel zu bekommen .... aber es ist keine Build-in-Lösung. Mit einer globalen Variablen, können Sie noch tun, wie folgt:

Dim oldTarget As Range 

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If oldTarget Is Nothing Then GoTo e 
    If oldTarget.Rows.Count > 1 Then 
    Dim x As Range 
    For Each x In oldTarget.Rows 
     If x.Cells(1, 5).Value = "" Then x.Cells(1, 1).Value = "" 
    Next 
    Else 
    If oldTarget.Cells(1, 5).Value = "" Then oldTarget.Cells(1, 1).Value = "" 
    End If 
e: Set oldTarget = Target.EntireRow 
End Sub 

Wie Sie sehen: Dim oldTarget As Range ist außerhalb des Unter. Auf diese Weise bleibt der eingestellte Wert/das Objekt erhalten, bis VBA gestoppt wird (Schließen der Arbeitsmappe/direktes Zurücksetzen vba)

+0

Hey jeder der Code, dass Ich habe von @Mocair funktioniert, aber es löscht irgendwie das Einzelklick-Ereignis irgendwo in der Zeile, die ich bereits habe, die das Datum in Spalte A setzt, ist da weg, ich kann das zurück kee bekommen p der code es macht es so muss ich etwas in die Spalte E für den Code für das Datum, das ich vorher hatte, um zu arbeiten – MarQuisM