ich bräuchte mal wieder eure Hilfe. Habe zwar schon etwas in die Richtung gefunden aber noch nicht exakt wie ich es benötige.
Folgendes:
Ich habe eine Excel-Datei mit mehreren möglichen Buchungszeiten. Diese Buchungszeiten werden bei der Vergabe überschrieben. Gibt es eine Möglichkeit das, sobald die Texteingabe gelöscht wird, die vorgegebene Buchungszeit wieder erscheint.
B6 = "06:00 Uhr" immer dann wenn keine manuelle Texteingabe in der Zelle erfolgt.
Aktuell würde ich das nur hinbekommen wenn die Eintragung in einer anderen Zelle erfolgt.
Man könnte aber tricksen und die Zeiten als Text (="06:00") in eine 1 Pixel breite Spalte links der Slot-Spalte eingeben. Solange nichts im Slot steht, sieht man die "Zeit". Sobald was eingegeben wird, sieht man die Eingabe.
Allerdings finde ich die Idee grundsätlich nicht so gut. Wenn du vier/fünf Slots direkt hintereinander belegst, ist nicht mehr klar erkennbar um welchen Slot genau es sich handelt. Also ich würde die Zeit immer sichtbar lassen.
Und noch etwas: verzichte auf verbundene Zellen. Die machen nur Ärger.
03.07.2023, 09:55 (Dieser Beitrag wurde zuletzt bearbeitet: 03.07.2023, 10:10 von Enrico.)
Jaaa ... das ist eine simple aber effektive Lösung.
Problem ist nur ... weil wir jede Fläche am Tag min. 2x belegen müssen brauche ich auch 2 Zeitvorgaben. Das hatte ich in meiner ersten schnell zusammengebauten Tabelle nicht berücksichtigt.
Gibt es hier eventuell doch eine VBA-Lösung das in Zelle A1 immer folgender "Text" erscheint wenn diese leer ist?
03.07.2023, 12:49 (Dieser Beitrag wurde zuletzt bearbeitet: 03.07.2023, 12:52 von Gast 123.)
Hallo
die simpelste Lösung ist ein Target Makro im aktiven Sheet. Hier wird geprüft ob Zelle A1 leer ist. Für "xyz" musst du bitte deinen richtigen Wert angeben. Das ist alles.
Code:
Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1").Value = Empty Then Application.EnableEvents = False Range("A1").Value = "xyz" 'Hier dein Wert! Application.EnableEvents = True End If End Sub
mfg Gast 123 Nachtrag: Falls es in A1 zwei verschiedene Werte sein können kann man noch eine InputBox Abfrage einfügen.
Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:1 Nutzer sagt Danke an Gast 123 für diesen Beitrag 28 • Enrico
Private Sub Worksheet_Change(ByVal Target As Range) Dim Bereich As Range Dim Zelle As Range Dim temp As Variant Set Bereich = Intersect(Target, Me.UsedRange) If Not Bereich Is Nothing Then For Each Zelle In Bereich.Cells If IsEmpty(Zelle) Then temp = Worksheets(Me.Name & "_M").Range(Zelle.Address) If Not IsEmpty(temp) Then Application.EnableEvents = False On Error Resume Next Zelle = temp On Error GoTo 0 Application.EnableEvents = False End If End If Next Zelle End If End Sub
Hierbei wird einmalig das Blatt (von Hand) als Vorlage kopiert. Die Vorlage muss dann den bisherigen Namen mit angehängtem _V bekommen (also BisherigerName_V). _V steht für "Vorlage".
Jetzt kann man im ursprünglichen Blatt alles Überschreiben. Sobald man etwas löscht, bekommt die betreffene Zelle den ursprünglichen Inhalt.
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:1 Nutzer sagt Danke an HKindler für diesen Beitrag 28 • Enrico
Private Sub Worksheet_Change(ByVal Target As Range) Dim Bereich As Range Dim Zelle As Range Dim temp As Variant Set Bereich = Intersect(Target, Me.UsedRange) If Not Bereich Is Nothing Then For Each Zelle In Bereich.Cells If IsEmpty(Zelle) Then temp = Worksheets(Me.Name & "_M").Range(Zelle.Address) If Not IsEmpty(temp) Then Application.EnableEvents = False On Error Resume Next Zelle = temp On Error GoTo 0 Application.EnableEvents = False End If End If Next Zelle End If End Sub
Hierbei wird einmalig das Blatt (von Hand) als Vorlage kopiert. Die Vorlage muss dann den bisherigen Namen mit angehängtem _V bekommen (also BisherigerName_V). _V steht für "Vorlage".
Jetzt kann man im ursprünglichen Blatt alles Überschreiben. Sobald man etwas löscht, bekommt die betreffene Zelle den ursprünglichen Inhalt.
Das wäre optimal. Wenn ich das richtig verstehe müsste ich (wenn sich mal was ändert) das nur in der Vorlage abändern und es würde überall übertragen werden? Habe schon versucht den Code auf eine Excel-Datei zu übertragen. Aktuell kommen aber immer noch Fehler hoch, läuft also noch nicht ganz.
Muss ich mal suchen wo jetzt das Problem liegt....
04.07.2023, 14:19 (Dieser Beitrag wurde zuletzt bearbeitet: 04.07.2023, 14:19 von HKindler.)
Uups, da waren noch ein paar Ungereimtheiten in der Sub. Man sollte doch nicht noch in letzter Sekunde ein paar Verbesserungen machen wollen...
Versuch mal das hier:
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Dim Bereich As Range Dim Zelle As Range Dim temp As Variant Dim Vorlage As Worksheet Set Vorlage = Worksheets(Me.Name & "_V") Set Bereich = Intersect(Target, Me.Range(Vorlage.UsedRange.Address)) If Not Bereich Is Nothing Then For Each Zelle In Bereich.Cells If IsEmpty(Zelle) Then temp = Vorlage.Range(Zelle.Address) If Not IsEmpty(temp) Then Application.EnableEvents = False On Error Resume Next Zelle = temp On Error GoTo 0 Application.EnableEvents = True End If End If Next Zelle End If End Sub
Falls du zuletzt meinen vorigen Code laufen lassen hast, dann sind die Events noch ausgeschaltet. Dann musst du zunächst im Direktfenster Application.EnableEvents = True eingeben. Sorry für die Umstände.
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:1 Nutzer sagt Danke an HKindler für diesen Beitrag 28 • Enrico
ich habe noch eine rein fachliche Frage an euch beide. Wenn ich die Lösung richtig verstehe werden bei leerer Zelle die Daten aus einer Copy Tabelle zurückgeladen. Sehe ich das richtig??
Was ist, wenn aber mal eine leere Zelle gewünscht ist? Sie leer bleiben soll. Wie bekommt ihr das hin?? Mein Tipp: bei der Eingabe ein Sonderzeichen festlegen, z.B. zweimal "##" eingeben, als Löschfunktion! Sonst müsste man die Copy Tabelle auf leer setzen. Das per VBA lösen ist m.E. einfacher.
04.07.2023, 14:56 (Dieser Beitrag wurde zuletzt bearbeitet: 04.07.2023, 15:00 von HKindler.)
Hi,
Code:
... If IsEmpty(Zelle) Then temp = Vorlage.Range(Zelle.Address) If Not IsEmpty(temp) Then ...
Nur wenn die aktuelle Zelle leer ist (also gelöscht wurde), dann wird in temp der Inhalt der selben Zelle des Vorlagenblattes gelesen. Nur wenn diese nicht leer ist, geht es mit dem Kopieren weiter.. Wenn sie leer ist, passiert nichts, und die frisch geleerte Zelle bleibt leer.
EDIT: Ah jetzt! Du willst eine Zelle, die eine Vorgabe hat, bewusst leer haben. Dann gib einfach ="" ein. Aber genau das (eine leere Zelle) ist ja nicht gewünscht.
Gruß, Helmut
Win10 - Office365 / MacOS - Office365
Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:1 Nutzer sagt Danke an HKindler für diesen Beitrag 28 • Enrico