Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1172to1176
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

Kopieren mittels worksheet_change prozedur

Kopieren mittels worksheet_change prozedur
Christoph
Hallo liebe Excel-Profis,
einiges konnte ich mir hier schon abschauen, aber jetzt stehe ich vor einem Rätsel.
Ich soll eine Statistik-Funktion in eine per Excel geführte Bibliotheksliste bringen. Gefragt ist, wie oft wurde ein Buch ausgeliehen und wann zum letzten Mal. Man könnt das abhängig machen von einer Spalte Datum. Dabei wird bei Ausleihe des Buches das aktuelle Datum eingetragen und bei Rückgabe gelöscht.
Wie kann ich es bewerkstelligen, das in einer anderen Zelle daneben das Datum der letzten Ausleihe stehenbleibt, auch wenn es in der Originalzelle gelöscht wurde?
Ich dachte daran automatisiert mit worksheet_change oder worksheet calculate eine Kopie in einer ausgeblendeten Spalte anzulegen (z.B. Datum2). Dann könnte ich in der Spalte letzte Ausleihe mit einer wenn-Funktion arbeiten à la
=wenn(Datum>Datum1;Datum;Datum2)
Das habe ich auch grundsätzlich hinbekommen, aber dann rattert er das Makro immer wieder durch bis zum Stapelfehler, weil das kopieren & einfügen ja auch eine Änderung der Tabelle ist.
Wer weiß Rat?
Un hat jemand eine Idee, wie ich in für alle Zellen eine Spalte mitzählen lassen kann, wie oft diese verändert wurde? Also in F2 soll stehen wie oft e2 verändert wurde etc.
Ich danke euch schon mal und hoffe ihr versteht mich.
Viele Grüße Christoph

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
da reichen 2 Formeln ...
16.08.2010 09:53:34
Matthias
Hallo
... und Gültigkeitsregeln
Das kannst Du mit Zählenwenn()
und der ArrayFormel
{MAX((Bereich1=Buch_x)*Bereich2)} realisieren
Hier mal ein kleines Beispiel:
https://www.herber.de/bbs/user/71076.xls
Gruß Matthias
AW: da reichen 2 Formeln ...
16.08.2010 15:48:25
Christoph
Danke für deine Lösung. Sieht gut aus und ist einfach und funktional, aber für mich leider nicht nutzbar.
Ich hab mal eine Beispieldatei hochgeladen. Das Original hat über 1000 Bücher.
https://www.herber.de/bbs/user/71091.xls
Das mit dem zuletzt entliehen habe ich in Spalte BL notdürftig gelöst. (Ich hätte nur gern das er wieder in die zuletzt markierte Zelle springt.) Kann ich das in VBA mit active.cell oder so lösen?)
Und in BM soll nun stehen wie oft dieses eine Buch schon ausgeliehen wurde. Ist das machbar?
Danke nochmals,
Christoph
Anzeige
AW: da reichen 2 Formeln ...
16.08.2010 23:51:58
fcs
Hallo Christoph,
so sollte es in etwa funktionieren.
In Spalte BM muss du noch das Zahlenformat anpassen. Bei der manuellen Eingabe des Ausleihdatum muss du ggf. noch eine Abfrage einbauen, ob neu ausgeliehen wurde und entsprechen das Eintragen der Werte in Spalte BL und BM steuern.
Gruß
Franz
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
If Not Intersect(Target, Range("q:q")) Is Nothing And Target.Row > 3 Then
Application.EnableEvents = False
If Target.Value = "" Then
'Eintragen des Datums per Doppelklick
Target = Date
Call VerleihdatumAnzahl(Zeile:=Target.Row, Datum:=Target.Value)
Cancel = True
Else
If MsgBox("Datum überschreiben?", vbOKCancel + vbQuestion) = vbOK Then
'Verleihdatum ändern - Anzahl Ausleihen wird nicht erhöht.
Target = Date
Cells(Target.Row, 64) = Target.Value
Cancel = True
End If
End If
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("q:q")) Is Nothing And Target.Row > 3 Then
Application.EnableEvents = False
If Target.Cells.Count = 1 Then
If Target.Value = "" Then
'Do nothing, Zellinhalt wurde gelöscht - Buch wurde zurückgebracht
Else
'manuelle Eingabe des Ausleihdatums - Anzahl Ausleihen wird erhöht
Call VerleihdatumAnzahl(Zeile:=Target.Row, Datum:=Target.Value)
End If
Target.Select
Else
MsgBox "Es darf immer nur der Inhalt einer Zelle in Spalte Q bearbeitet werden!"
Application.Undo
Target.Range("A1").Select
End If
Application.EnableEvents = True
End If
End Sub
Private Sub VerleihdatumAnzahl(Zeile As Long, Datum As Date)
'Letztes Verleihdatum eintragen und Anzahl Ausleihen um 1 erhöhen
Cells(Zeile, 64) = Datum
Cells(Zeile, 65) = Cells(Zeile, 65) + 1
End Sub

Anzeige
AW: da reichen 2 Formeln ...
17.08.2010 08:04:59
Christoph
SUPER!
Genau das habe ich gesucht! Vielen Dank, das klappt prima und den Rest kann ich auch anpassen.
Du hast mir sehr geholfen. Danke nochmal. Das hätte ich allein nicht hinbekommen.
Gruß Christoph

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige