VBA für Datum und Uhrzeitauflistung (Fortführung), beim öffnen der Arbeitmappe?

 - (Computer, Excel, VBA)

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Probier es einmal so:

Private Sub Workbook_Open()
 If [a1] = "" Then
  [a1] = Date
  [b1] = Time
 ElseIf [a2] = "" Then
  [a2] = Date
  [b2] = Time
 Else
  [a1].End(xlDown).Offset(1, 0) = Date
  [a1].End(xlDown).Offset(0, 1) = Time
 End If
End Sub

Sieht richtig aus, wofür aber das ElseIf? Funktioniert xlDown nicht bei nur einer Zelle / Zeile?

1
@LuckyJack1986

In meinem Test funktioniert es erst ab der dritten Zeile.

Ich behaupte nicht, dass man den Code nicht noch optimieren kann.
Probier es einfach aus.

1
@pushido

Ich weiß nur, dass die Funktionen abgebildet werden, die man mit der Steuerungstaste und den Pfeiltasten ausführen kann.

Es gibt verschieden Variationen des Befehls. Man kann auch [A9999].End(xlUp) und so weiter ausprobieren.

... Sehe gerade, dass man sich dann das ElseIf sparen könnte.

Dann gibt es noch den UsedRange. Meiner Erinnerung hat man hier nicht viel gewonnen, wenn man diesen nutzt.

1

Herzlichen Dank für die zeitnahe Rückmeldung !

Funktioniert so wie ich es wollte (Datum in Spalte A, Uhrzeit in Spalte B).

2
@Suboptimierer

Wollte die Option auf Spalte C erweitern ("UserName") hat aber nur 2x funktioniert, ohne Spalte C.

Dachte es würde so funktionieren (siehe folgend zusammengebastelt).

Private Sub Workbook_Open()

 If [a1] = "" Then

 [a1] = Date

 [b1] = Time

 [c1] = UserName

 ElseIf [a2] = "" Then

 [a2] = Date

 [b2] = Time

 [c2] = UserName

 Else

 [a1].End(xlDown).Offset(1, 0, 0) = Date

 [a1].End(xlDown).Offset(0, 1, 0) = Time

 [a1].End(xlDown).Offset(0, 0, 1) = UserName

 End If

End Sub

War aber nicht so !

Woran liegt es.

1
@Tron1701

Offset erwartet 2 Parameter: den Zeilen- und den Spaltenoffset. Das ist die Zahl an Zeilen und Spalten relativ zur Bezugszelle.

1
@Suboptimierer

Welches Offset wäre Richtig (Syntax)?

Würde mir sehr Helfen.

1
@Tron1701

Sorry,

hatte das Modul bei "UserName" nicht berücksichtigt, da Tests in anderen Dateien ohne Modul, führten zu unzureichenden Ergebnissen.

Offset habe ich korrigiert, funktioniert jetzt auch auf bestehendes VBA mit anderen Abfragen !

[a1].End(xlDown).Offset(1, 0) = x

[a1].End(xlDown).Offset(0, 1) = xy

[a1].End(xlDown).Offset(0, 2) = xyz

1000 Dank für Deine Bemühungen.

Ist jetzt erledigt !!!

2
Private Sub Workbook_Open()
 
   Dim LastRow As Long
    With ActiveSheet
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With
    If LastRow > 1 Then
        LastRow = LastRow + 1
    End If
    
    Cells(LastRow, 1) = Date
    Cells(LastRow + 1, 1) = Time
End Sub

LG

Auch Dir herzlichen Dank für die zeitnahe Rückmeldung !

Funktioniert auch, Datum und Uhrzeit sind allerdings in Spalte A untereinander fortführend.

Eventuell diese Version hilfreich für andere Vorhaben.

Danke !

1
@Tron1701

Achsoo, falsch gelesen...

Private Sub Workbook_Open()
 
   Dim LastRow As Long
    With ActiveSheet
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With
    If LastRow > 1 Then
        LastRow = LastRow + 1
    End If
    
    Cells(LastRow, 1) = Date
    Cells(LastRow, 2) = Time
End Sub
1
@pushido

Es gibt nur Einträge in A1 und B1.

Daten werden nicht fortgeführt.

Spalte C Zusatzabfrage wäre schön (z. B. "UserName") zu realisieren.

1
@Tron1701
Private Sub Workbook_Open()
 
   Dim LastRow As Long
    With ActiveSheet
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With
    If (LastRow > 1) Or Range("A1").Value <> "" Then
        LastRow = LastRow + 1
    End If
    
    Cells(LastRow, 1) = Date
    Cells(LastRow, 2) = Time
End Sub

Sorry, beim 2. Mal habe ich nicht getestet...

.Cells(.Rows.Count, "A").End(xlUp).Row

liefert 1 Wenn die Tabelle Leer ist bzw. wenn nur die 1. Zeile voll ist... Meine Fehler- sorry noch mal. Jetzt sollte es funktionieren....

1
@pushido

Hallo,

vielen Dank, habe die Version von "Suboptimierer" realisiert und prämiert.

Sorry, musste jemanden selektieren der als Erstes die Beste Option lieferte und hoffe das Du nicht sauer bist.

Das nächste Mal … .

Dennoch werde ich Deine Version mal Testen, eventuell bieten sich da ganz andere Möglichkeiten.

1000 Dank für Dein Engagement.

Leider bekommt man von Fragestellern nicht immer die Aufmerksamkeit, obwohl man Stunden für die Lösungsfindung verbracht hat.

Einziger Trost ist, das gewisse Fragestellungen einem als Vorteilhaft erschließen, falls es zu ähnliche Situation kommt.

Gruß Tron

0
@pushido

Hallo,

wo käme die Korrektur hin, da schon Bestand im "alten" Syntax

0
@Tron1701

Beim 2. Mal habe ich nur das hier hinzugefügt gehabt:

Or Range("A1").Value <> ""

Also nochmal hier die komplette Funktion:

Private Sub Workbook_Open()
 
   Dim LastRow As Long
    With ActiveSheet
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With
    If (LastRow > 1) Or Range("A1").Value <> "" Then
        LastRow = LastRow + 1
    End If
    
    Cells(LastRow, 1) = Date
    Cells(LastRow, 2) = Time
End Sub

Mir ist es egal ob meine Lösung gewählt wird oder nicht- mir ist es wichtig, das was ich an Lösung bereitstelle soll funktionieren und soll auch korrekt sein- ich kämpfe nicht für die "Hilfreichste Antwort" sondern ich gebe mein Wissen gerne weiter.

Die Antwort von Suboptimierer funktioniert zwar, aber in der Informatikwelt macht man das einfach nicht so... (für die ersten 2 Einträge macht er die Abfrage manuell, und ab dem 3. dann automatisiert- das gehört sich nicht so).

Egal, viel Erfolg! ;)

1
@pushido

Nochmals 1000 Dank !!! ;-)

Schade finde ich es, dass manchmal keine Resonanz von Fragestellern erfolgt, obwohl man unter Umständen sehr viel Zeit zur Lösungsfindung verbracht hat.

Ich habe Deine Varianten getestet (nach meinen Bedürfnissen die Abfrage erweitert) und funktionieren beide.

Die 1. Variante verteilt sich in Spalte A (Daten nach unten fortführend) und ist auch Super. Die 2. Variante verteilt sich in den Zeilen (Daten nach unten fortführend).

Ich hätte da noch einen Frage: Wie sieht der Zusatz-Syntax aus wenn das VBA sich nur auf "Tabelle1" (als Beispiel) beziehen darf, denn die Einträge erfolgen auf dem Blatt, wo man sich befindet, bzw. zuletzt befunden hatte (beim öffnen der Datei).

Könnte bei mehr Register sich als unvorteilhaft erweisen.

0
@Tron1701
Private Sub Workbook_Open()
 
   Dim LastRow As Long
   ActiveWorkbook.Sheets("Test1").Activate
   
    With ActiveSheet
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        
    End With
    If (LastRow > 1) Or Range("A1").Value <> "" Then
        LastRow = LastRow + 1
    End If
    
    Cells(LastRow, 1) = Date
    Cells(LastRow, 2) = Time
End Sub

Mit dieser Zeile:

ActiveWorkbook.Sheets("Test1").Activate

bestimmst Du welcher Sheet der "ActiveSheet" sein soll. Also statt "Test1" kannst du sonst was schreiben (auch dynamisch).

Beachte, dass dein Code im Reiter "DieserArbeitsmappe" (auf der linken Seite) eingetragen werden muss.

Ich hoffe, es ist soweit alles verständlich.

LG

1
@pushido

Super, einfach Klässisch !

Bezieht sich auf Registernamen und nicht der Tabellenzuordnung, habe ich dann festgestellt.

Nochmals 1000 Dank für Dein Engagement.

Gruß Tron

0

Hallo pushido!

Wie bekommst du den VBA-Code so schön formatiert in den thread?

1
@pushido

Aha, danke. Aus meinem Excel 2016 ein kleines Makro mit 10 Zeilenkommt so an:

Sub Makro1()

End Sub

End Sub

End Sub

End Sub

End Sub

End Sub

End Sub

End Sub

End Sub

Vielleicht liegt es am Browser, welchen verwendest du?

0

Ohne VBA kannst du das Datum / die Uhrzeit sehr schnell manuell setzen, ohne sie schreiben zu müssen (auch weil viele Netzwerke kein VBA zulassen):

Shortcut Datum: Strg+Punkt

Shortcut Zeit: Strg+Doppelpunkt

gehen beide auch nacheinander (sinnvollerweise mit Leerzeichen dazwischen) oder einzeln in Fließtexten.

In LO etc geht dieser Shortcut nicht. (oder anders?)

Danke lamiam,

ist mir geläufig, möchte aber aus Sicherheitstechnischen Gründen im Hintergrund die gewünschte Option über VBA laufen lassen, sobald die Datei geöffnet wird.

Hierzu spielen andere Aspekte eine wichtige Rolle.

Gruß Tron

1

Was möchtest Du wissen?