Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1624to1628
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Funktion: If condi. cell a true write date cell b

Funktion: If condi. cell a true write date cell b
15.05.2018 13:01:04
MichaelE
Hallo herber community,
ich kriege diesen Code nicht mal Ansatzweise zum laufen und habe nicht den blassesten Schimmer woran es scheitert. Hoffe hier ist ein crack der die Antwort weiß (-:
Wenn im Quellbereich per Dropdown 75% oder mehr ausgewählt wird soll im Zielbereich das aktuelle Datum geschrieben werden. Ich bin kein Fan von OnChange Events über eine gegebene Range daher die Funktion.
Option Explicit

Public Function WriteFinishDate(rngQuelle As Range, Optional rngZiel As Range)
If rngQuelle(1, 1).Value = "" Then Exit Function
If rngQuelle(1, 1).Value = 0.75 Then
rngZiel(1, 1).Value = Date
End If
End Function

Beste Grüße,
Michi

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Funktion: If condi. cell a true write date cell b
15.05.2018 13:19:02
ChrisL
Hi
Das ergibt so keinen Sinn. Entweder machst du eine Prozedur (Sub), die du per Change-Event anstösst. Oder du machst eine benutzerdefinierte Funktion (UDF), die dann allerdings einen Rückgabewert haben sollte. Im zweiten Fall wäre jedoch eine einfache WENN-Formel sinnvoller.
Dennoch hier die UDF:
Public Function WriteFinishDate(rngQuelle As Range) As Date
If rngQuelle.Value = "" Then Exit Function
If rngQuelle.Value = 0.75 Then
WriteFinishDate = Date
End If
End Function
cu
Chris
AW: Funktion: If condi. cell a true write date cell b
15.05.2018 13:44:31
MichaelE
Hm komisch. Habe von hier abgeschaut(dieser Code funktioniert Einwandfrei) bei diesem ist die Zelle in die geschrieben wird nicht gleich der Zelle in der die Funktion steht.
Option Explicit
Public Function TakeComment(rngQuelle As Range, Optional rngZiel As Range)
If rngZiel Is Nothing Then
Set rngZiel = Application.Caller
End If
If rngQuelle(1, 1).Text = "" Then Exit Function
With rngZiel
If Not .Comment Is Nothing Then
.Comment.Delete
End If
.AddComment rngQuelle(1, 1).Text
End With
End Function
Wenn ich deinen Code probiere komme ich leider in eine Fehlerschleife (WriteFinishDate = Argument ist nicht optional).
Anzeige
AW: Funktion: If condi. cell a true write date cell b
15.05.2018 14:10:31
ChrisL
Hi
OK, eine Funktion muss technisch gesehen nicht zwingend einen Rückgabewert haben (es geht beides, Sub und Function). Hier eine Abhandlung (zwar auf Basis dBASE, aber den Ratschlag am Ende würde ich auch für VBA beherzigen):
https://cantaria.de/dbase-tricks/unterschied-von-prozeduren-und-funktionen/
Daher zwei Ratschläge zur Verwendung von Prozeduren und Funktionen:
1. verwenden Sie niemals denselben Namen für eine function und eine procedure.
2. verwenden Sie immer eine function, wenn die Routine einen Wert zurückliefert, und verwenden Sie immer eine procedure wenn kein Ergebnis zurückgegeben wird.

rngQuelle ist sowohl bei TakeComment, wie auch bei WriteFinishDate nicht optional. Same same...
Wie soll denn deine Funktion aufgerufen werden?
a) Change Event willst du nicht
b) UDF mit Rückgabewert direkt in der Zelle willst du scheinbar auch nicht
c) mittels anderem Makro, OK geht. Aber die kleine If-Then Abfrage kannst du auch gleich in den Code integrieren.
d) als volatile Tabellenfunktion? Da wäre ein Change-Event performanter, weil du gezielt die Target-Range abfragen kannst
cu
Chris
Anzeige
AW: Funktion: If condi. cell a true write date cell b
16.05.2018 09:18:30
MichaelE
Habe es jetzt doch mit dem Change Event gelöst.
Code ist nicht von mir habe ihn nur modifiziert.
Option Explicit ' Variablendefinition erforderlich
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
' wird im definierten Bereich ein Wert geändert, wird in der
' nächsten Spalte das Datum eingetragen
Dim RaBereich As Range                          ' Variable für überwachten Bereich
Dim RaZelle As Range                            ' Variable für Zelle die zur Zeit  _
bearbeitet wird
Set RaBereich = Range("tbl_LOP[Progress]")          ' Bereich der Wirksamkeit
Set RaBereich = Intersect(RaBereich, Range(Target.Address))
If Not RaBereich Is Nothing Then
Application.ScreenUpdating = False          ' Bildschirm abschalten
Application.EnableEvents = False            ' Reaktion auf Eingabe abschalten
For Each RaZelle In RaBereich               ' Schleife über alle veränderten Zellen im ü _
berwachten Bereich
If RaZelle.Value = 0.75 Then
RaZelle.Offset(0, 8) = Date         ' Datum eintragen
ElseIf RaZelle.Value = 1 _
And RaZelle.Offset(0, 8)  0 Then      'Bei Wechsel von 75% auf 100%
GoTo Ende                           ' Nichts tun
Else
RaZelle.Offset(0, 8) = ""           'Bei zurücksetzen auf 

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige