myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   Exel VBA Statisches Datum/Uhrzeit (https://mygully.com/showthread.php?t=2970576)

St4R 05.07.13 10:02

Exel VBA Statisches Datum/Uhrzeit
 
Hallo Gemeinde,

Ich habe folgendes vorhaben.
Ich möchte in Exel in eine Zelle Haben (A1) in welche automatisch das Aktuelle Datum eingetragen wird, sobald in Zelle (A2) ein Wert steht.
Das gleiche auch noch mit der Uhrzeit.
Sobald in Zelle A4 ein Wert Steht, wird in Zelle A3 Die Aktuelle Zeit Eingetragen.
Diese Zeiten sollen dann Statisch sein und nur verändert werden wenn in den jeweiligen Überprüfungsfelder wieder etwas verändert wird.

Habe schon gegoogelt, aber nix passtendes gefunden. Muss wohl mit VBA gelöst werden, und das kann ich leider nicht.

Danke für eure Mühe

eitch100 05.07.13 11:40

Hi...
erstmal an alle VBA-Profis... ich habe mir das alles selbst beigebracht und ich weiß, dass das progammiertechnisch nicht ganz das Wahre ist, aber es funktioniert....:D

Menü Entwicklertools---Code anzeigen--- dort folgenden Code hineinkopieren...

Datums- und Zeitformat kannst du dir dann selbst aussuchen... Immer wenn du nun in Zelle A2 oder A4 etwas änderst, wird entsprechend in A1 bzw. A3 das aktuelle System-Datum bzw. die aktuelle System-Zeit eingetragen

VideoLord 06.07.13 12:57

@eitch100

Ich hätte das zunächst ohne VBA gelöst.

Ins Feld A1
=wenn(A2="";"";heute())
A1 muss als Datum formatiert sein.

Ins Feld A3
=wenn(A4="";"";jetzt())
A3 muss als Uhrzeit formatiert sein.

Sobald nun in A2 oder A4 Änderungen vorgenommen werden, aktualisiert sich automatisch das Feld A1 oder A3 und zwar unabhängig voneinander.
Anmerkung: Das Datum und auch die Zeit ändern sich bei dieser Version leider immer beim Neuöffnen der Datei- daher wahrscheinlich unbrauchbar für dich!

LG
VideoLord

eitch100 06.07.13 15:53

Zitat:

Zitat von VideoLord (Beitrag 24700207)
Sobald nun in A2 oder A4 Änderungen vorgenommen werden, aktualisiert sich automatisch das Feld A1 oder A3 und zwar unabhängig voneinander.

Aber eben nur einmal; und zwar genau dann wenn A2 oder A4 nicht leer sind. Bei weiteren Änderungen tut sich nix mehr und was noch schlimmer ist, die Werte in A1 und A2 passen sich permanent an, was ja ausdrücklich nicht erwünscht war...

In deiner Anmerkung hast du ja schon das richtige Fazit gezogen... Mit meinem Code muss man allerdings die Änderung mit Enter abschließen...

VideoLord 06.07.13 19:28

Da bin ich ja recht froh, dass du noch vor Ende deines Zitats meinen Post zu Ende gelesen hast und Ihn entsprechend bewertet und kommentiert hast.
Schein bei einigen hier im Board ein regelrechter Sport zu sein, sei es wie es ist. Spam bleibt Spam- mein Motto.

Zitat:

Zitat von eitch100 (Beitrag 24700578)
Aber eben nur einmal; und zwar genau dann wenn A2 oder A4 nicht leer sind. Bei weiteren Änderungen tut sich nix mehr und was noch schlimmer ist, die Werte in A1 und A2 passen sich permanent an, was ja ausdrücklich nicht erwünscht war...

In deiner Anmerkung hast du ja schon das richtige Fazit gezogen... Mit meinem Code muss man allerdings die Änderung mit Enter abschließen...


eitch100 07.07.13 09:21

Mein Motto: konstruktive Kritik und auch mal ein gutes Späßle muss drin sein... :T Helfen, wenn man kann oder es versucht, darf ja auch ruhig ein bisschen Spaß machen...

St4R 07.07.13 15:13

@eitch100: Hab deine Formel angewendet, leider Funktioniert es aber nicht. Vielleicht bin ich auch einfach zu blöde um es anzupassen. Mein Datumsfeld soll A3 sein mein Uhrzeitfeld B3. Eingabefeld ist D3.

Hab deine Formel so Angepasst. Falsch ?

Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveCell.Row = 3 And ActiveCell.Column = 1 Then
Range("A3").Value = Date
End If
If ActiveCell.Row = 2 And ActiveCell.Column = 1 Then
Range("B3").Value = Time
End If
End Sub


VideoLord 07.07.13 16:26

ActiveCell.Row = 3 / bedeutet die dritte Spalte also C
ActiveCell.Column = 1 / bedeutet die erste Zeile also 1
zusammen = C1

Somit kannst du dir einfach den korrekten Eingabeplatz selber zuordnen, für beide deiner Anweisungen, also Zeit und Datum.

St4R 07.07.13 19:53

Also ich hab das jetzt lange ausprobiert aber irgendwie funzt das nicht. Da kommt Laufzeitfehler und Exel Absturz.

Erebos76 08.07.13 03:21

Na so ein Mist aber auch. Das Change-Ereignis wird natürlich auch dann ausgelöst, wenn Datum oder Zeit in eine Zelle geschrieben werden. So entsteht hier eine endlose Ereignisauslösung.

VideoLord 08.07.13 09:33

Probier mal das hier, ansonsten läuft der eingestellte Code immer in einer Schleife, die Excel zum Absturz bringen.

Code:

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo EndeSub
    Application.EnableEvents = False
    If ActiveCell.Row = 3 And ActiveCell.Column = 4 Then
    Range("B3").Value = Time
    End If
    If ActiveCell.Row = 3 And ActiveCell.Column = 4 Then
    Range("A3").Value = Date
    End If
EndeSub:
  Application.EnableEvents = True
End Sub

Ausgabezellen:
A3 = Datum
B3 = Uhrzeit

Eingabefeld:
D3 = Eingabe

eitch100 08.07.13 11:35

Zitat:

Zitat von VideoLord (Beitrag 24703232)
ActiveCell.Row = 3 / bedeutet die dritte Spalte also C
ActiveCell.Column = 1 / bedeutet die erste Zeile also 1
zusammen = C1

natürlich genau andersrum... aber war wohl ein Versehen...:T
row=ZEILE=3
column=SPALTE=1
zusammen=A3


Zitat:

Zitat von St4R (Beitrag 24703051)
@eitch100: Hab deine Formel angewendet, leider Funktioniert es aber nicht. Vielleicht bin ich auch einfach zu blöde um es anzupassen. Mein Datumsfeld soll A3 sein mein Uhrzeitfeld B3. Eingabefeld ist D3.

Mein obiger Code funktioniert natürlich nur für die in deinem Start-Post gewünschte Einstellungen... (und da gibt auch keinen Laufzeitfehler bzw. Endlosschleife)


Zitat:

Zitat von VideoLord (Beitrag 24704593)
Probier mal das hier, ansonsten läuft der eingestellte Code immer in einer Schleife, die Excel zum Absturz bringen.

Jupp... so funzt es... vermutlich gibt es ohne die Fehlerroutine einen Absturz, weil sich der Wert für "Time" während der Laufzeit natürlich ändert und Excel es nicht auf die Reihe bekommt...

Man könnte sich höchstens eine If-Bedingung schenken... und die Fehlerroutine sollte man in die If-Anweisung integrieren, sonst führt er diese bei jedem Change-Ereignis aus...



Edit: Hier noch eine andere Möglichkeit... einfach über Doppelklick auf D3... (natürlich alten Code vorher löschen...)

St4R 09.07.13 19:12

Danke euch ! Es Funktioniert. Jetzt habe ich nur das Problem, dass ich die Funktion gerne nach unten Kopiert hätte, da das Dokument nachher 500 Zeilen mit der Jeweiligen Funktion hat. Row ist die Gleiche aber Cell immer 1 höher. Möglich ?

eitch100 09.07.13 19:36

dieser Code gilt für alle in Spalte D ab Zeile 3...
Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveCell.Row >= 3 And ActiveCell.Column = 4 Then
On Error GoTo EndeSub
Application.EnableEvents = False
Cells(ActiveCell.Row, 2).Value = Time
Cells(ActiveCell.Row, 1).Value = Date
EndeSub:
Application.EnableEvents = True
End If
End Sub

Aber die Änderungen immer mit Enter abschließen... wenn du z.B. in D4 eine Zahl eingibst und ohne Enter den Cursor nach unten machst, ändert der Code Zeit und Datum in der falschen (nächsten) Zeile... das macht der alte Code übrigens auch so... also das mit Doppelklick ist auf jeden Fall sicherer...
Code:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If ActiveCell.Row >= 3 And ActiveCell.Column = 4 Then
Cancel = True
Cells(ActiveCell.Row, 2).Value = Time
Cells(ActiveCell.Row, 1).Value = Date
End If
End Sub


St4R 09.07.13 19:50

Wie cool, das Funktioniert !!! Danke vielmals


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.