Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Text in leerer Zelle
#1
Hallo,

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.

Im Anhang eine Beispiel-Datei


Angehängte Dateien
.xlsx   Text immer in Zelle.xlsx (Größe: 10,26 KB / Downloads: 6)
Antworten Top
#2
Hi,

so wie gewünscht würde das nur per VBA gehen.

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.
Gruß,
Helmut

Win10 - Office365 / MacOS - Office365
Antworten Top
#3
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?
Antworten Top
#4
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:
  • Enrico
Antworten Top
#5

.xlsm   Text immer in Zelle.xlsm (Größe: 17,62 KB / Downloads: 6)
Probier mal
Gruß Dirk
---------------
100  - Wenn du nicht weißt, wo du hin willst, ist es egal, welchen Weg du einschlägst.

[-] Folgende(r) 1 Nutzer sagt Danke an DIZA für diesen Beitrag:
  • Enrico
Antworten Top
#6
Hi,

wenn schon VBA, dann würde ich das so machen:
Code:
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:
  • Enrico
Antworten Top
#7
(03.07.2023, 13:24)HKindler schrieb: Hi,

wenn schon VBA, dann würde ich das so machen:
Code:
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....
Antworten Top
#8
Uups, da waren noch ein paar Ungereimtheiten in der Sub. Blush Angel
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:
  • Enrico
Antworten Top
#9
Hallo

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.

mfg Gast 123
Antworten Top
#10
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:
  • Enrico
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste