Digital

Das Makro, mit dem Excel Einträge unaufgefordert datiert

Aktualisiert am 04.11.2008

Ein Makro erspart viel Arbeit beim Führen von Protokollen in Excel: Es setzt bei jedem Eintrag automatisch das Datum in die Nachbarzelle.

Excel loggt auf Wunsch auch Eingaben im Sekundentakt.

Excel loggt auf Wunsch auch Eingaben im Sekundentakt.

Der Wunsch, Einträge vollautomatisch mit Datum zu versehen, wird in schöner Regelmässigkeit an die Kummerbox herangetragen. Das kommt nicht von ungefähr, denn Microsofts Tabellenkalkulation wird von vielen Anwendern zu Protokollzwecken genutzt. Wenn solche Routinearbeiten beschleunigt werden können, bedeutet das eine grosse Zeitersparnis – daher stellen wir hier ein Makro vor, das zwar etwas Aufwand macht, bis es eingerichtet ist, dann aber eine grosse Stütze bei monotonen Tätigkeiten ist.

Um das Makro einzurichten, starten Sie Excel und sogleich den Visual Basic Editor. Dazu betätigen Sie die Tastenkombination «Alt» + «F11». Doppelklicken Sie in der Baumliste am linken Fensterrand bei «VBAProject > Microsoft Excel Objekte» auf «Diese Arbeitsmappe». Der Editor zeigt nun einen Dialog mit zwei Dropdown-Listen an der oberen Kante. In der ersten Liste wählen Sie «Workbook», in der zweiten «SheetChange». Excel generiert nun Code, der dafür sorgt, dass das Makro automatisch bei jeder Änderung am Tabellenblatt ausgeführt wird:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
(…)
End Sub

Dieses Code-Gerüst ergänzen Sie nun wie folgt:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Rem Dieses Makro fügt rechts vom Eintrag das aktuelle Datum ein
Rem Matthias Schüssler, 21. April 2008

On Error GoTo Ausgang
Dim Zielzelle As Range

If (Target.Comment Is Nothing) Then
   Set Zielzelle = Target.Offset(0, 1)
   If Zielzelle.Value = "" Then

      Zielzelle.AddComment "autoinsert"
      Zielzelle.Value = Date
      End If
   End If
Ausgang:
End Sub

Nun betätigen Sie «Datei > Schliessen und zurück zu Microsoft Excel» und können das Makro bereits nutzen. Es wird Ihnen auffallen, dass jedes Datum einen Kommentar mit «autoinsert» trägt. Das dient dazu, die automatischen Datumsangaben zu identifizieren und verhindert, dass Excel auch die automatischen Datumseinträge datieren will.

Das Makro fügt den Datumseintrag rechts ein. Wenn Sie das Datum lieber links hätten, dann geht das mit folgendem Code:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Rem Dieses Makro fügt links vom Eintrag das aktuelle Datum ein
Rem Matthias Schüssler, 23. April 2008

On Error GoTo Ausgang
Dim Zielzelle As Range

If (Target.Comment Is Nothing) And (Target.Column > 1) Then
   Set Zielzelle = Target.Offset(0, -1)
   If (Zielzelle.Value = "") Then

      Zielzelle.AddComment "autoinsert"
      Zielzelle.Value = Now
      Zielzelle.NumberFormat = "dd.mm.yy h:mm:ss"
      End If
   End If
Ausgang:
End Sub

Das Makro wird nicht ausgeführt, wenn eine Zelle in Spalte A markiert ist.

Das zweite Makro unterscheidet sich noch in einem weiteren Punkt von der ersten Variante. Es fügt nicht nur das Datum ein, sondern auch die Uhrzeit. Das liegt daran, dass bei Zielzelle.Value nicht Date, sondern Now steht. Das Format für die Datums- und Zeitangabe wird über den Befehl Zielzelle.NumberFormat gesetzt. Sie können hier wie gewohnt ein Excel-Datumsformat übergeben; für eine Angabe ohne Sekunden zum Beispiel "dd.mm.yy h:mm" oder für eine Angabe mit Tag und Uhrzeit "dd. h:mm". Wenn Sie auch hier nur das Datum haben möchten, verwenden Sie Date anstelle von Now; auch bei Date können Sie wie beschrieben das Datumsformat über NumberFormat setzen.

Sollte das Makro nicht ausgeführt werden, überprüfen Sie die Sicherheitseinstellungen bei «Extras > Makros > Sicherheit»: Hier sollte die Option auf «Mittel» stehen.

Autodatum abschalten

Ergänzung vom 30. April: Ein Leser hat gefragt, ob es möglich wäre, das Makro temporär zu deaktivieren. Das geht mit folgender Ergänzung. Fügen Sie dazu am Anfang eine Zeile ein, die eine Variable für den Status definiert:
Public IsInactive As Boolean

Ergänzen Sie dann das Makro um die Zeile If IsInactive Then GoTo Ausgang:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Rem Dieses Makro fügt links vom Eintrag das aktuelle Datum ein
Rem Matthias Schüssler, 23. April 2008

If IsInactive Then GoTo Ausgang

Nun wird noch ein Makro benötigt, mit dem Sie das Autodatum ein- und ausschalten. Das ist mit folgendem Code möglich, den Sie am Ende des Projekts «DieseArbeitsmappe» einfügen:

Public Sub StatusAutodatierenUmschalten()
IsInactive = Not IsInactive
End Sub

Um die Autodatierung zu deaktivieren, führen Sie nun einfach das Makro StatusAutodatierenUmschalten aus. Ein weiterer Aufruf dieses Makros schaltet die Autodatierung wieder ein. Zum einfachen Aufruf können Sie dem Makro ein Tastaturkürzel zuweisen oder es als Schaltfläche in die Symbolleiste legen.

Erstellt: 04.11.2008, 20:17 Uhr

Digital

Populär auf Facebook Privatsphäre


Live @ Sunset

11. bis 22. Juli - Zürich Dolder u.a. mit B.B. King, Elton John und Alanis Morissette!

Familie, Beruf und Studium

Sonia Uhlmann ist keine typische Studentin. Dank Fernstudium hat sie den Master trotzdem geschafft.

Online-Kadermarkt

ALPHA.CH: der online-Kadermarkt der Schweiz.

Online-Kadermarkt

ALPHA.CH: der online-Kadermarkt der Schweiz.