Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1780to1784
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zelle formatieren

Zelle formatieren
14.09.2020 10:24:19
Lukas
Hallo,
ein Beispiel zu meiner Frage.
In der Zelle 2 der Spalte B steht beispielsweise der Einkauf von einer Person.
Am Anfang steht eine Datumsangabe und danach die Einkaufsliste.
Zum Beispiel: 14.09.20 Marmelade, Toast, Butter, Schinken, Eis, ...
Bei einem neuen Einkauf soll in der "gleichen Zelle" nach gleichem Vorgehen (Datum und dann die Einkaufsliste), der Eintrag oben drüber geschrieben werden.
Ich möchte, dass nur der aktuellste Eintrag angezeigt wird, und dass maximal 3 Zeilen angezeigt werden.
Gruß
Lukas

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zelle formatieren
14.09.2020 15:22:15
ChrisL
Hi Lukas
Hier eine mögliche Interpretation.
Code ins Modul der betreffenden Tabelle kopieren.
Public strText As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B2")) Is Nothing Then
If Range("B2") = "" Then
strText = ""
Exit Sub
End If
On Error GoTo errorhandler
Application.EnableEvents = False
If strText  "" Then
If InStr(Range("B2"), Chr(10)) Then Range("B2") = Split(Range("B2"), Chr(10))(0)
If InStr(strText, Chr(10)) Then
Range("B2") = Range("B2") & Chr(10) & Split(strText, Chr(10))(0) & _
Chr(10) & Split(strText, Chr(10))(1)
Else
Range("B2") = Range("B2") & Chr(10) & strText
End If
End If
strText = Range("B2")
Application.EnableEvents = True
End If
Exit Sub
errorhandler:
Application.EnableEvents = True
MsgBox Err.Number & Chr(10) & Err.Description
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B2")) Is Nothing Then strText = Range("B2")
End Sub
cu
Chris
Anzeige
AW: Zelle formatieren
15.09.2020 08:04:18
Lukas
Hallo,
Danke für die Antwort.
Wenn ich früher ein Makro erstellt habe dann konnte ich dies einem Button hinterlegen.
Dieses Makro finde ich aber nicht, wenn ich dies auf einen Button hinterlegen möchte.
Muss ich kein Button hinterlegen?
Schön für mich wäre es, wenn der Code direkt nach Eingabe in das Feld B2 ausgeführt wird.
Gruß
Lukas
AW: Zelle formatieren
15.09.2020 12:58:22
ChrisL
Hi Lukas
Muss ich kein Button hinterlegen? Nein (bzw. ja, musst du nicht)
Schön für mich wäre es, wenn der Code direkt nach Eingabe in das Feld B2 ausgeführt wird.
Genau, darum braucht es keinen Button.
Einfach mal probieren!
cu
Chris
Anzeige
AW: Zelle formatieren
16.09.2020 09:31:58
Lukas
Hallo,
ich habe paar Werte in Zelle C2 geschrieben. Diese habe ich kopiert und in Zelle B2 eingefügt.
Wenn ich in die Zelle B2 klicke und danach aus der Zelle herausgehe, dann werden drei Einträge dargestellt. Der zweite Eintrag wird identisch mit dem ersten Eintrag. Es werden nur noch die Werte angezeigt, die in der Tabelle stehen.
Userbild
Da jeder neue Eintrag mit dem aktuellen Jahr beginnt und ich nur ein Eintrag sehen möchte in der Excel Tabelle (wenn man aber auf die Zelle B3 klickt, sollen oben in dem Kästchen, neben fx alle Einträge zu sehen sein) habe ich mir gedacht, dass man alles anzeigen soll, bis zum zweiten mal das Jahr 2020 kommt.
Ich habe folgenden Code.
Sub InStr()
Dim iAnzahl As Integer
Dim sEintrag As String
Dim sEintragen As String    'ohne 2020 am Anfang
Dim sAnzeigen As String
sEintrag = Range("B2")
sEintragen = Right(sEintrag, Len(sEintrag) - 4)
iAnzahl = InStr(sEintragen, "2020")
sAnzeigen = Left(sEintrag, iAnzahl + 2)
End Sub
Ich habe den Text auf der Variablen sAnzeigen, ich weis jedoch nicht, wie man das programmieren soll, dass nur dieser Eintrag in der Tabelle angezeigt wird, aber dennoch die anderen Sachen im Kästchen(neben fx) stehen, wenn man auf das Kästchen klickt.
Danke für die bisherige Hilfe.
Gruß
Lukas
Anzeige
AW: Zelle formatieren
16.09.2020 13:05:34
ChrisL
Hi
Solange die Spalte breiter wie der Text ist, kannst du die gewünschte Darstellung umsetzen (fixe Zeilenhöhe).
Userbild
Die Zeilenhöhe dynamisch aufgrund der automatisch generierten Zeilenumbrüche zu steuern, sehe ich hingegen weniger realistisch.
Dein Makro solltest du nicht als InStr benennen, weil es sich dabei auch um einen VBA-Befehl (geschützter Begriff) handelt. Zudem würde ich nicht nach Jahreszahlen suchen (der Code soll ja auch nächstes Jahr noch funktionieren) und stattdessen eher die Zeilenschaltung Chr(10) suchen.
Nachfolgend ein neuer Lösungsvorschlag. Neue Logik: Aktuelle Eingabe & Alter Zelleninhalt, danach auf 3 Zeilen kürzen. Dies beisst sich natürlich, wenn du eigentlich nur den alten Eintrag abändern wolltest. Die perfekte Lösung gibt es nicht, weil das Programm deine Intention (neuer Eintrag oder Korrektur) nicht kennen kann.
Public strText As String
Private Sub Worksheet_Change(ByVal Target As Range)
Dim arr As Variant
If Not Intersect(Target, Range("B2")) Is Nothing Then
If Range("B2") = "" Then
strText = ""
Exit Sub
End If
If strText  "" Then
strText = Range("B2") & Chr(10) & strText
arr = Split(strText, Chr(10))
If UBound(arr) > 2 Then ReDim Preserve arr(2)
strText = Join(arr, Chr(10))
On Error GoTo errorhandler
Application.EnableEvents = False
Range("B2") = strText
Application.EnableEvents = True
Else
strText = Range("B2")
End If
End If
Exit Sub
errorhandler:
Application.EnableEvents = True
MsgBox Err.Number & Chr(10) & Err.Description
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B2")) Is Nothing Then strText = Range("B2")
End Sub
cu
Chris
Anzeige
AW: Zelle formatieren
16.09.2020 15:32:31
Lukas
Hallo,
das Programm finde ich jetzt besser als vorher.
Ich habe mir gedacht, dass ich die "Aufgabe" vereinfache.
Die Zeilenhöhe wird automatisch eingestellt. Wenn die Zeilenhöhe größer als 75 ist, wird die Zeilenhöhe auf 75 gesetzt.(5 Zeilen in der Schriftgröße)
Der Code soll automatisch ausgeführt werden, dieser hat noch Fehler.
Sub Hi()
Dim dHoehe As Double
dHoehe = Range("B2").Rows.AutoFit
If dHoehe >= 75 Then
Cells(2, 2).RowHeight = 75
Else:
Cells(2, 2).Rows.AutoFit
End If
End Sub
Für dHoehe kommt bei mir -1?
Was muss ich verändern?
Danke Chris für deine Hilfe.
Gruß
Lukas
Anzeige
AW: Zelle formatieren
16.09.2020 16:45:02
ChrisL
Hi
With Cells(2, 2)
.Rows.AutoFit
If .RowHeight >= 75 Then .RowHeight = 75
End With
cu
Chris
AW: Zelle formatieren
17.09.2020 08:42:01
Lukas
Hallo Chris,
wann wird das Programm abgespielt?
Ich habe ein

Sub Zeilenhoehe()...End Sub
eingebaut, damit ich das Programm abspielen kann.
Sub Zeilenhoehe()
With Cells(2, 2)
.Rows.AutoFit
If .RowHeight >= 75 Then .RowHeight = 75
End With
End Sub
Ich habe es bisher nicht hinbekommen, dass die Zeilenhöhe automatisch, ohne Sub, eingestellt wird.
Kann das Programm automatisch ohne

Sub ausgeführt werden?
Gruß
Lukas

Anzeige
AW: Zelle formatieren
17.09.2020 17:40:46
ChrisL
Hi Lukas
Ich würde es zwischen End If und Exit Sub ins Change-Ereignis einkopieren.
Call Zeilenhoehe
oder direkt den Code in die Prozedur integrieren.
cu
Chris
AW: Zelle formatieren
17.09.2020 18:42:45
ChrisL
Ich Schussel... nicht nötig, dass der Schnipsel jedes mal abgespielt wird. Besser weiter oben einfügen.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim arr As Variant
If Not Intersect(Target, Range("B2")) Is Nothing Then
If Range("B2") = "" Then
strText = ""
Exit Sub
End If
If strText  "" Then
strText = Range("B2") & Chr(10) & strText
arr = Split(strText, Chr(10))
If UBound(arr) > 2 Then ReDim Preserve arr(2)
strText = Join(arr, Chr(10))
On Error GoTo errorhandler
Application.EnableEvents = False
Range("B2") = strText
Application.EnableEvents = True
With Cells(2, 2)
.Rows.AutoFit
If .RowHeight >= 75 Then .RowHeight = 75
End With
Else
strText = Range("B2")
End If
End If
Exit Sub
errorhandler:
Application.EnableEvents = True
MsgBox Err.Number & Chr(10) & Err.Description
End Sub

cu
Chris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige