Microsoft Excel

Herbers Excel/VBA-Archiv

Uhrzeit mit Mausklick eintragen | Herbers Excel-Forum


Betrifft: Uhrzeit mit Mausklick eintragen von: Uwe Siebers
Geschrieben am: 12.01.2012 07:39:18

Guten Morgen zusammen,

in einer Tabelle sind in der Spalte A insgesamt 45 Mitarbeiter aufgeführt. Meine Aufgabe besteht nun darin, auf "Zuruf" in den Zellen B1:E45 Uhrzeiten festzuhalten.

Einfach wäre das ja mit`einer Art "Zeitstempel" - mit anderen Worten mit einem Mausklick - zu realisieren. Das gewünschte Format der Uhrzeit wäre hierbei h:mm. Aber wie geht das??? Die Lösung über VBA wäre schon klasse...

Schon mal jetzt besten Dank für Eure Hilfe!

Uwe

  

Betrifft: AW: Uhrzeit mit Mausklick eintragen von: hary
Geschrieben am: 12.01.2012 07:47:24

Hallo Uwe
Mit Doppelklick. Hier ohne festen Bereich. Code in den Code der Tabelle.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Target = Format(Now, "h:mm")
 Cancel = True
End Sub

gruss hary


  

Betrifft: nicht wirklich von: Erich G.
Geschrieben am: 12.01.2012 09:53:17

Hi Hary,
dein Code trifft IMHO nicht so ganz die Anforderung.

Now liefert nicht nur die Uhrzeit, sondern Datum + Uhrzeit. Time ist hier einfacher.

Format(Now,"h:mm") macht aus dem Zeitstempel einen Text, der dann in die Tabelle geschrieben wird.
Dabei wandelt Excel automatisch den Text in eine Uhrzeit um.

Mit Format(Now,"h:mm") wird nicht das Format der Zelle festgelegt, sondern nur das Aussehen des (Zwischen-)Textes.
Die Zelle bekommt bei mir - wenn sie vorher Standard-formatiert war - das Format hh:mm - nicht wie gewünscht h:mm.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   If Not Intersect(Target, Range("B1:E45")) Is Nothing Then
      With Target
         .NumberFormatLocal = "h:mm"
         .Value = Time
      End With
      Cancel = True
   End If
End Sub
Die Zeile ".NumberFormatLocal = "h:mm"" kann entfallen, wenn der ganze Bereich schon richtig "h:mm"-formatiert ist.

Jetzt gerade nicht klar ist mir, warum mit .NumberFormat = "h:mm" das Format "hh:mm" wird,
d. h. das "Local" ist notwendig. Aber warum?

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: @Erich von: hary
Geschrieben am: 12.01.2012 10:08:38

Hallo Erich
Ich hatte es auch mit Time gemacht.

Target = Format(Time, "h:mm")
 Cancel = True

Warum weiss ich nicht, aber die Zelle ging immer auf das Format AM/PM. Konnte machen was ich wollte. Daher hab ich Now genommen.
Jetzt in einer neuen Mappe geht's. Format springt aber auch wie bei Dir auf hh:mm.
gruss hary


  

Betrifft: @Hary von: Erich G.
Geschrieben am: 12.01.2012 10:25:37

Hallo Hary,
Format(...,"h:mm") erzeugt einen Text.
Den brauchen wir hier überhaupt nicht, denn wir wollen eine Zeit in die Zelle schreiben,
also die Zahl Time (größergleich 0, kleiner als 1).
Also: Target = Time oder Target.Value = Time

Wenn das Zellformat vorher Standard ist, wird jetzt die Zeit im (US-)Standardformat h:mm:ss AM/PM angezeigt.
Aber wir wollen h:mm. Dann müssen wir das Aussehen der Zelle, also das Format, ändern.
Das können wir mit NumberFormatLocal oder NumberFormat einstellen.

Wenn das Zellformat vorher schon richtig eingestellt war, ist am Aussehen nichts zu tun,
Target = Time
reicht in der Prozedur vollkommen aus.

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: stimmt... von: hary
Geschrieben am: 12.01.2012 10:42:44

Hallo Erich
... springe zwischen Boerse, Spaetzle mit Pilzsosse und Forum hin und her. Daher der Denkfehler.
gruss hary


  

Betrifft: AW: nicht wirklich von: Uwe Siebers
Geschrieben am: 12.01.2012 11:14:59

Hallo Erich!

Deine Lösung passt genau so, wie ich mir das gewünscht hatte.

Perfekt!

Vielen Dank

Uwe

PS: Habe in den Zellen B1, C1 usw. stets das aktuelle Tagesdatum stehen. Wäre es möglich, das grundsätzlich der Cusor nach dem Öffnen der Datei stets auf dem aktuellen Datum steht?


  

Betrifft: Welches Blatt, welche Zelle auswählen? von: Erich G.
Geschrieben am: 12.01.2012 12:42:22

Hi Uwe,
so etwas (ich meine deine neue Frage im P.S.) würde man in der Prozedur Workbook_Open() erledigen.

Aber ich habe die Frage noch gar nicht verstanden. Auf welche Weise steht in B1, C1 usw. stets das aktuelle Datum?
(Eine Möglichkeit wäre, dass in diesen Zellen die Formel "=HEUTE()" steht.)
Aber welche dieser Zellen soll dann ausgewählt werden - die sind doch alle gleich?

Noch eine Frage: Du sprichst nur von der Datei (=Mappe) und der Zelle. Hat die Mappe nur ein einziges Blatt?
Wenn nicht: Auf welchem Blatt befinden sich diese Zellen B1 usw. mit dem Datum?

Noch eine Nachbemerkung/Frage zum eigentlichen Thema:
Hast du ".NumberFormatLocal = "h:mm"" in der Routine stehen lassen oder
ist der Bereich B1:E45 von vornhereion mit h:mm formatiert? (Letzteres wäre geschickter.)

Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: Welches Blatt, welche Zelle auswählen? von: Uwe Siebers
Geschrieben am: 12.01.2012 19:06:38

Hallo Erich,

in B1 steht z.B. der 01.01.12 im Format TT.MM.JJ. Ab C1 lautet dann der Eintrag B1+1 usw. Das Format TT.MM.JJ bleibt hier unverändert. Wäre aber kein Thema so ich das Anderes eintragen soll. Mit dem Eintrag =HEUTE() komme ich in keiner der Zellen weiter, da die Eintragungen, die ich mit "Deinem" Mausbklick vorgenommen habe, noch über Monate hinweg nachvollziehbar sein müssen.

Eben das ist meine Frage, das ich zunächst auch denke, das doch alle Zellen gleich sind... Irgendwie müßte mir dann eine Routine die Monatsdaten da eintragen...

Jep, die Mappe/Datei hat zur Zeit nur ein einziges Blatt. Nach Ablauf eines Monats soll diese stets z.B. via PDF-Creator "ausgedruckt", sprich onhe spätere Möglichkeit der Änderung in PDF konvertiert werden. Das geht ja ganz prima "zu Fuß" und bedarf wohl keiner Routine.

Das einzige Blatt der Mappe heißt schlicth Zeitstempel

Zum Thema an sich, Jaaa, dachte mir das das Format h:mm "voreingestellt" Vorteile bietet. Das hatte ich so eingestellt, ähm, formatiert.

Gruß aus Kleve.

Uwe





  

Betrifft: AW: Welches Blatt, welche Zelle auswählen? von: fcs
Geschrieben am: 12.01.2012 20:34:05

Hallo Uwe,

falls du die Zeiten ohne Sekunden in der Tabelle eintragen willst, dann muss du dein Makro noch etwas anpassen.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim dblZeit As Double, dblMinuten As Double
  If Target.Row > 1 And Target.Column > 1 Then
    dblZeit = Time
    Cancel = True
    Target.Value = dblZeit 'sekundengenau
    
    Target.Value = CDate(Format(dblZeit, "hh:mm")) 'minuten - Sekunden abgeschnitten
    
    dblMinuten = Round(Val(Format(dblZeit, "ss")) / 60, 0) 'Sekunden auf Minute gerundet
    Target.Value = CDate(Format(dblZeit, "hh:mm")) + dblMinuten / 60 / 24 'minuten gerundet
  End If
End Sub

Unter "DieseArbeitsmappe" fügst du das folgende Makro ein, um automatisch beim Öffnen das aktuelle Datum in Zeile 1 zu selektieren.
Private Sub Workbook_Open()
  Dim Spalte As Long
  With Worksheets(1)
    .Activate
    For Spalte = 2 To .Cells(1, 1).End(xlToRight).Column
      With .Cells(1, Spalte)
        If .Value = Date Then
          .Select
          ActiveWindow.ScrollColumn = Spalte
          Exit For
        End If
      End With
    Next
  End With
End Sub

Gruß
Franz


  

Betrifft: Minuten-Rundung von: Erich G.
Geschrieben am: 12.01.2012 21:22:32

Hi Franz,
würde für die Minuten-Rundung das hier nicht ausreichen?

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Target.Row > 1 And Target.Column > 1 Then _
      Target.Value = Application.Round(Time * 144, 1) / 144
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich


  

Betrifft: AW: Minuten-Rundung von: fcs
Geschrieben am: 12.01.2012 21:54:16

Hallo Erich,

es führen halt in Excel manchmal viele Wege zum Ziel.

Deine Rundung auf Minuten ist natürlich der elegantere Weg.
Wäre halt nett gewesen, wenn du die 144 noch erläutert hättest (Minuten pro Tag (24*60) dividiert durch 100.

Gruß
Franz


Beiträge aus den Excel-Beispielen zum Thema "Uhrzeit mit Mausklick eintragen"