Bei uns in der Firmensoftware ist es möglich beim Datum, z.b. „+2“ einzutragen und automatisch zählt die Software das heutige Datum + 2 Tage hinzu und schreibt es mir in das Feld wo ich vorher „+2“ eingetragen habe.
Geht das auch bei Excel, wo ich in eine Zelle „+2“ eintrage und Excel trägt automatisch das Datum +2Tage ein?
Verstehe ich Dich richtig? In A1 steht z. B. 15.10.2011. Wenn Du jetzt in der gleichen Zelle A1 die Zahl 2 eingibst, soll in A1 das Datum 17.10.2011 ausgegeben werden.
Sie ist sehr diffizil und unausgegoren! Vor allem musst Du beachten: Wenn einmal ein Fehler aufgetreten ist, musst Du diese Datei schliessen und Excel herunterfahren und wieder neu starten. - Ich hab das nicht recht im Griff!
Sie ist sehr diffizil und unausgegoren! Vor allem musst Du
beachten: Wenn einmal ein Fehler aufgetreten ist, musst Du
diese Datei schliessen und Excel herunterfahren und wieder neu
starten. - Ich hab das nicht recht im Griff!
Hallo Niclaus,
vllt. ist dieser Ansatz für dich interessant
Option Explicit
Dim Wert(1 To 20)
Private Sub Worksheet\_Change(ByVal Target As Range)
Dim Zelle As Range
Set Target = Intersect(Target, Range("A1:A20"))
Application.EnableEvents = False
If Target Is Nothing Then Exit Sub
For Each Zelle In Target
Zelle.Value = Zelle.Value + Wert(Zelle.Row)
Wert(Zelle.Row) = Zelle.Value
Next Zelle
Application.EnableEvents = True
End Sub
Du hast hier im Forum den „makro-internen“ Speicher - hier mit Wert(1) bis Wert(20) - auch schon demonstriert und erklärt. Ich hoffe, ich habe ihn jetzt auch internalisiert
Einen Hinweis noch: Ich hatte Dein Makro in eine Tabelle eingefügt. Es funktionierte auch alles bestens. Ich speicherte und schloss die Datei mit einigen erfassten Zahlen im Bereich A1:A20. Beim nächsten Oeffnen war die Enttäuschung riesig: Die Additionen funktionierten nicht mehr bei den Zahlen, die in der gespeicherten Datei bereits vorhanden waren.
Bei der Durchsicht des Makros war mir auch klar warum: Der „Speicher“ mit Wert(1) bis Wert(20) ist ja beim ersten Durchlauf leer. Eine Lösung habe ich mit folgendem Vorgehen gefunden: Bevor ich an den bereits erfassten Zahlen etwas ändere, kopiere ich den Bereich A1:A20 und füge ihn an der gleichen Stelle wieder ein. Damit ist der Werte-Speicher „initialisiert“ und es klappt alles bestens. - Wichtig: Dieser Copy-Paste-Vorgang darf nur einmal gemacht werden!
Gibt es dafür eine professionellere Lösung? Mit Workbook_open?
Noch einmal vielen Dank und herzliche Grüsse Niclaus
Der „Speicher“ mit Wert(1) bis Wert(20) ist ja beim ersten
Durchlauf leer. Eine Lösung habe ich mit folgendem Vorgehen
gefunden: Bevor ich an den bereits erfassten Zahlen etwas
ändere, kopiere ich den Bereich A1:A20 und füge ihn an der
gleichen Stelle wieder ein. Damit ist der Werte-Speicher
„initialisiert“ und es klappt alles bestens. - Wichtig: Dieser
Copy-Paste-Vorgang darf nur einmal gemacht werden!
Gibt es dafür eine professionellere Lösung? Mit Workbook_open?
Eine Variante wäre es, den Kommentar der Zellen als ‚Zwischenspeicher‘ zu verwenden und darüber dann die Berechnungen anzustellen. Die Kommentare bleiben ja beim Schliessen der Mappe erhalten:
Private Sub Worksheet\_Change(ByVal Target As Range)
Dim rngZelle As Range
Dim rngBereich As Range
Set rngBereich = Intersect(Target, Range("A1:A20"))
If Not rngBereich Is Nothing Then
Application.EnableEvents = False
For Each rngZelle In rngBereich
With rngZelle
If .Comment Is Nothing Then
.AddComment CStr(.Value)
Else
.Comment.Text CStr(DateValue(.Comment.Text) + .Value)
.Value = DateValue(.Comment.Text)
End If
End With
Next rngZelle
Application.EnableEvents = True
End If
End Sub
Eine Variante wäre es, den Kommentar der Zellen als
‚Zwischenspeicher‘ zu verwenden und darüber dann die
Berechnungen anzustellen. Die Kommentare bleiben ja beim
Schliessen der Mappe erhalten.
Salü Thomas
Mit den Kommentaren arbeitet auch das Makro in der Datei, die ich vor zwei Tagen zu diesem Thema hochgeladen habe. Das Makro von Reinhard ist halt schon viel eleganter: Diese Leichtigkeit des Seins …
Viele Grüsse
Niclaus
Eine Variante wäre es, den Kommentar der Zellen als
‚Zwischenspeicher‘ zu verwenden und darüber dann die
Berechnungen anzustellen. Die Kommentare bleiben ja beim
Schliessen der Mappe erhalten.
Mit den Kommentaren arbeitet auch das Makro in der Datei, die
ich vor zwei Tagen zu diesem Thema hochgeladen habe.
Ich muss gestehen, dass ich die Mappe erst jetzt näher angesehen habe… :.-(
Das Makro
von Reinhard ist halt schon viel eleganter: Diese Leichtigkeit
des Seins …
Soooo viel schwerer ist mein Sein aber auch nicht…
Gibt es dafür eine professionellere Lösung? Mit Workbook_open?
Hallo Niclaus,
klassisch wäre das so:
In DieseArbeitsmappe
Option Explicit
Private Sub Workbook\_Open()
Call Einlesen
End Sub
Private Sub Workbook\_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Tabelle1" Then Call Werte(Target)
End Sub
**In ein Modul:**
Option Explicit
Dim Wert(1 To 20)
Sub Werte(ByVal Target As Range)
Dim Zelle As Range
Set Target = Intersect(Target, Range("A1:A20"))
Application.EnableEvents = False
If Target Is Nothing Then Exit Sub
For Each Zelle In Target
Zelle.Value = Zelle.Value + Wert(Zelle.Row)
Wert(Zelle.Row) = Zelle.Value
Next Zelle
Application.EnableEvents = True
End Sub
Sub Einlesen()
Dim N As Integer
With Worksheets("Tabelle1")
For N = 1 To 20
Wert(N) = .Range("A" & N)
Next N
End With
End Sub