Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Makro beim Verlassen einer Zelle ausführen

Makro beim Verlassen einer Zelle ausführen
15.01.2017 20:44:16
Erich
Hallo,
ich habe folgendes Problem:
Ich möchte einer Zelle in einem bestimmten Bereich beim Auswählen ein bestimmtes Format (Text) zuweisen - das habe ich hinbekommen:

Private Sub worksheet_selectionchange(ByVal wahlzelle As Range)
Dim makrobereich As Range
Set makrobereich = Range("h4:k14")
If Not Application.Intersect(makrobereich, Range(wahlzelle.Address)) Is Nothing Then
wahlzelle.NumberFormat = "@"
End If
End Sub

Wenn in der Zelle eine Änderung vorgenommen (ein Wert eingetragen) wurde, soll das Format beim Verlassen der Zelle von Text auf Zeit geändert werden - das funktioniert auch:

Private Sub worksheet_change(ByVal wahlzelle As Range)
Dim makrobereich As Range
Set makrobereich = Range("h4:k14")
If Not Application.Intersect(makrobereich, Range(wahlzelle.Address)) Is Nothing Then
wahlzelle.NumberFormat = "hh:mm"
End If
End Sub

Das erste Makro hat nur ein kleines Problem aufgeworfen: Wenn die Zelle nur ausgewählt und nichts geändert wird, soll kein Makro ausgeführt bzw. das Format nicht verändert werden! (damit bereits eingetragene "Zeiten" nicht wieder Text werden)
Deshalb die Frage, ob es eine Möglichkeit gibt, ein Makro erst auszufühern wenn in die Zelle tatsächlich geschrieben wird?
Die ganze Baustelle soll dazu dienen eine deppensichere Zeiteingabe (ein-, zwei-, drei- und vierstellig) in die Tabelle zu ermöglichen.
z.B.: 1400 ergibt 14:00, 14 ergibt 14:00, 140 ergibt 01:40, 3 ergibt 03:00 usw....
die Formeln dazu habe ich schon - nur an der Formatierung scheitert´s....
mfg,
Erich
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro beim Verlassen einer Zelle ausführen
15.01.2017 20:50:45
Hajo_Zi
Hallo Erich,
Private Sub worksheet_change(ByVal wahlzelle As Range)
wird nur ausgeführt bei Änderung. Wo ist das Problem?

AW: Makro beim Verlassen einer Zelle ausführen
15.01.2017 21:05:04
Erich
Hallo Hajo,
ich habe die Zellen grunsätzlich als Text formatiert - jetzt trage ich in die Zelle einen Wert ein und der wird beim Verlassen (zweites Makro) auf Zeit formatiert - damit kann ich dann rechnen.
Wenn ich jetzt eine neue Zeit drüber schreiben will, muss ich die Zelle vorher wieder auf Text formatieren - worksheet_selectionchange - damit ich die zeichenfolge "umbauen" kann...
Wenn aber jemand nur in die Zelle klickt und nichts reinschreibt, dann wird eine bestehende Zeit wieder zum Text weil das Makro schon bei der Auswahl läuft und die Berechnung funktioniert nicht mehr...
Das Problem macht also eigentlich das erste Makro...
...und die Textformatierung ins worksheet_change zu schreiben funktioniert auch nicht, weil das erst ausgeführt wird wenn die Zelle wieder verlassen wird....
LG,
Erich
Anzeige
AW: Makro beim Verlassen einer Zelle ausführen
15.01.2017 21:29:37
Erich
Im Zuge eines kleinen Wutanfalles habe ich gerade die Zeitformatierung und den "Textumbau" aus dem Makro entfernt und festgestellt, das die Berechnung der Zeiten über die Formel auch funktioniert, wenn die Zeiten als Text vorliegen und nicht wieder in Zeit umgewandelt wurden!
Offensichtlich habe ich da irgendo anders einen kleinen Fehler eingebaut der mir beim Anklicken ohne Änderung die Formelberechnung zerstört....
DANKE für deine Bemühungen - ich begebe mich auf Fehlersuche....
LG,
Erich
Anzeige
AW: Makro beim Verlassen einer Zelle ausführen
15.01.2017 21:44:10
Gerd
Hallo Erich,
ansonsten, falls das Zahlenformat "Zeit" bleiben soll:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim makrobereich As Range, objZelle As Range
Set makrobereich = Application.Intersect(Target, Range("h4:k14"))
If Not makrobereich Is Nothing Then
For Each objZelle In makrobereich
If Not objZelle.NumberFormat = "hh:mm" Then _
objZelle.NumberFormat = "@"
Next
End If
End Sub
Gruß Gerd
Anzeige
AW: Makro beim Verlassen einer Zelle ausführen
15.01.2017 22:00:34
Erich
DANKE!
..das funktioniert natürlich auch - ich glaube, ich denke schon wieder viel zu kompliziert...
Danke und LG,
Erich
AW: Makro beim Verlassen einer Zelle ausführen
16.01.2017 05:57:10
Hajo_Zi
Hallo Erich,
Private Sub worksheet_change(ByVal wahlzelle As Range)
wird nur ausgeführt bei Änderung. Wo ist das Problem?

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Makro für die Formatierung beim Verlassen einer Zelle


Schritt-für-Schritt-Anleitung

Um ein Makro zu erstellen, das beim Verlassen einer Zelle in einem bestimmten Bereich die Formatierung anpasst, folge diesen Schritten:

  1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Doppelklicke im Projektfenster auf das entsprechende Arbeitsblatt, in dem das Makro verwendet werden soll (z. B. „Tabelle1“).

  3. Füge folgenden Code in das Codefenster ein:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       Dim makrobereich As Range
       Set makrobereich = Range("h4:k14")
       If Not Application.Intersect(makrobereich, Target) Is Nothing Then
           For Each objZelle In makrobereich
               If Not objZelle.NumberFormat = "hh:mm" Then
                   objZelle.NumberFormat = "@"
               End If
           Next
       End If
    End Sub
  4. Um die Formatierung beim Verlassen der Zelle auf Zeit zu ändern, füge folgenden Code hinzu:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim makrobereich As Range
       Set makrobereich = Range("h4:k14")
       If Not Application.Intersect(makrobereich, Target) Is Nothing Then
           Target.NumberFormat = "hh:mm"
       End If
    End Sub
  5. Schließe den VBA-Editor und teste dein Makro, indem du in die Zellen im Bereich H4:K14 klickst und Werte eingibst.


Häufige Fehler und Lösungen

  • Problem: Das Format ändert sich, auch wenn keine Eingabe erfolgt.

    • Lösung: Stelle sicher, dass das Worksheet_SelectionChange-Makro nur das Format ändert, wenn tatsächlich eine Eingabe erfolgt. Das zweite Makro (Worksheet_Change) sollte dafür sorgen, dass nur bei einer Änderung das Format auf Zeit gesetzt wird.
  • Problem: Bereits eingegebene Werte werden beim Klicken wieder zu Text.

    • Lösung: Überprüfe den Code, um sicherzustellen, dass die Formatierung nicht unnötig geändert wird, wenn keine Eingabe erfolgt.

Alternative Methoden

Falls du nicht mit VBA arbeiten möchtest, kannst du auch die bedingte Formatierung verwenden, um das Aussehen der Zellen basierend auf den Eingaben anzupassen. Allerdings bietet VBA mehr Flexibilität und Kontrolle über die Formatierung.


Praktische Beispiele

Hier sind einige Beispiele, wie du die Eingaben formatieren kannst:

  • Eingabe: 1400Format: 14:00
  • Eingabe: 14Format: 14:00
  • Eingabe: 140Format: 01:40
  • Eingabe: 3Format: 03:00

Diese Formatierungen werden durch die oben genannten Makros automatisch vorgenommen, sobald die Zellen verlassen werden.


Tipps für Profis

  • Teste dein Makro in einer Kopie deiner Datei, um unerwünschte Änderungen zu vermeiden.
  • Dokumentiere deine Makros mit Kommentaren, um ihre Funktionsweise für zukünftige Anpassungen nachvollziehbar zu machen.
  • Überlege, Benutzerdefinierte Formate zu erstellen, um die Eingaben flexibler zu gestalten.

FAQ: Häufige Fragen

1. Wie kann ich das Makro nur für bestimmte Zellen aktivieren?
Du kannst den Bereich in Set makrobereich = Range("h4:k14") anpassen, um das Makro nur für bestimmte Zellen zu aktivieren.

2. Was passiert, wenn ich das Makro in einer anderen Excel-Version verwende?
Die oben genannten Makros sollten in den meisten modernen Excel-Versionen (ab Excel 2007) funktionieren. Achte darauf, dass die VBA-Umgebung in deiner Version aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige