Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
664to668
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
664to668
664to668
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Workbook_SheetChange Problem

Workbook_SheetChange Problem
15.09.2005 09:51:20
Johannes
Hallo Freunde,
ich habe bei folgenden Code ein Problem: in der aktiven Zelle wird über ein "gate to keybord" ein Messwert übertragen. Der Code trägt in die Zelle rechts davon das Datum und Zeit ein und geht eine Zelle tiefer und nach links zurück.
Manuell klappt das auch. Wenn ich aber versuche das über ein Workbook_SheetChange Ergeinis zu starten läuft der Code bis zum Abwinken, da wohl die Offset Anweisung in der letzten Zeile auch als Ereignis erkannt wird.
Hat jemand eine Idee wie ich das so ändern kann, dass der oben beschriebene Ablauf geht?
Einstweilen vielen Dank für Eure Hilfe
Gruß Johannes
Code:

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
ByVal Source As Range)
If ActiveCell.Row = 20 Then ActiveCell.Offset(-20, 2).Select
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=NOW()"
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False
ActiveCell.Offset(1, -1).Select 'hier scheint der Fehler zu liegen ?
End Sub

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Workbook_SheetChange Problem
15.09.2005 10:58:50
Andi
Hi,
vermute die Ursache des Problems eher in der Paste-Anweisung, aber das ist eigentlich egal.
Schalte an Anfang des Makros die Ereignisse mit
Application.EnableEvents = False
aus, und am Ende mit
Application.EnableEvents = True
wieder ein. Dann sollte es eigentlich gehen.
Schönen Gruß,
Andi
Beispieldatei
15.09.2005 12:56:52
Johannes
Hallo Freunde,
ich habe mal eine Beispieldatei hochgeladen:
https://www.herber.de/bbs/user/26594.xls
Vielen Dank an alle die sich um eine Lösung bemühen.
Gruß
Johannes
AW: Workbook_SheetChange Problem
15.09.2005 11:03:03
PeterW
Hallo Johannes,
durch die Veränderung des Blattes wird das Ereignis erneut ausgelöst. Ausschalten lassen sich die Ereignisse mit Application.EnableEvents = False (und wieder einschalten mit = True).
Den Rattenschwanz
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = "=NOW()"
Selection.Copy
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.CutCopyMode = False

kannst du zu
ActiveCell.Offset(0, 1) = NOW()
vereinfachen.
Wenn du mal beschreibst, in welchen Bereich die Eingaben erfolgen und wohin das Datum geschrieben werden soll kann man dir einen Code anbieten.
Gruß
Peter
Anzeige
AW: Workbook_SheetChange Problem
15.09.2005 12:37:26
Johannes
Hallo Peter,
zu Beginn ist die aktive Zelle A1, der Messwert wird eingetragen und in Zelle B1 soll das Datum und Uhrzeit - aber nicht als Formel, sondern nur der Wert, damit sich der Eintrag nicht verändert.
Dann soll die aktive Zelle A2 werden und der Vorgang start erneut wenn das "gate" einen neuen Messwert sendet.
Wenn man den Code küzer bekommt ist das mit interessant. Vielen Dank für Deine Mühe.
Gruß
Johannes
AW: Workbook_SheetChange Problem
15.09.2005 12:51:53
PeterW
Hallo Johannes,
willst du den Code wirklich in allen Tabellen haben oder nur in einer bestimmten? Von letztem Fall bin ich ausgegangen, der Code gehört in das Klassenmodul der betreffenden Tabelle:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
Cells(Target.Row, 2) = Now
Target.Offset(1, 0).Select
End If
End Sub

Die Zelle für die erste Eingabe muss manuell gesetzt werden, könnte man zwar auch automatisieren, ist mir aber nicht klar genug, wie sonst mit der Mappe gearbeitet wird.
Gruß
Peter
Anzeige
AW: Workbook_SheetChange Problem
15.09.2005 13:01:34
Johannes
Hallo Peter,
es ist nur eine Tabelle, der Start wird manuell auf A1 gesetzt. Die Begrenzung auf Zeile 20 in meiner Arbeitskopie ist nur zum Testen - soll wenn es läuft auf 20.000 hochgesetzt werden. Die Tabelle dient nur zum "Einsammeln der Daten". Ausgewertet werden die dann später in einer anderen Tabelle. Für die Auswertung ist aber nicht nur der Messwert entscheidend, sondern eben auch eine mögliche Veränderung über die Zeit.
Das Gate sendet nach dem Messwert ein "Enter" als Abschluss der Übertragung.
Gruß
Johannes
AW: Workbook_SheetChange Problem
15.09.2005 13:15:44
PeterW
Hallo Johannes,
bis auf die Einschränkung bis Zeile 20000 tut der Code genau das, was du möchtest. Was soll bei der 20001. Eingabe passieren, ab A1 überschreiben oder den Bereich löschen und neu beginnen?
Gruß
Peter
Anzeige
AW: Workbook_SheetChange Problem
15.09.2005 13:45:03
Johannes
Hallo Peter,
die aktive Zeile der Zelle wird abgefragt:
If ActiveCell.Row = 20 Then ActiveCell.Offset(-20, 2).Select
und über den Offset springt die aktive Zelle in C1 und das ganze geht wieder weiter ..
Manuell geht das ja auch - siehe Beispieldatei:
https://www.herber.de/bbs/user/26594.xls
Gruß
Johannes
AW: Workbook_SheetChange Problem
15.09.2005 13:51:37
PeterW
Hallo Johannes,
dann sollte das dein Problem lösen:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
Cells(Target.Row, 2) = Now
If Target.Row < 20000 Then
Target.Offset(1, 0).Select
Else
Cells(1, 1).Select
End If
End If
End Sub

Gruß
Peter
Anzeige
fast
15.09.2005 14:52:39
Johannes
Hallo Peter,
fast perfekt - mit
Cells(1, 1).Select
wird wieder die Zelle A1 angesprungen und damit der schon geschriebene Inhalt überschrieben. Es sollte aber C1 und nach weiterem Durchgang E1 usw angesprungen werden, also ein Offset(-20000,2).
Wenn ich aber einen solchen offset eingebe kommt in Spalte C Zeiten untereinander im Wechsel mit 0-Werten - :-(
Hast Du vieleicht hierzu eine Lösung? Danke schonmal.
Gruß
Johannes
AW: fast
15.09.2005 14:59:12
PeterW
Hallo Johannes,
dann versuch es mal so

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Count > 1 Then Exit Sub
On Error GoTo ErrHand
Application.EnableEvents = False
Target.Offset(0, 1) = Now
If Target.Row < 20000 Then
Target.Offset(1, 0).Select
Else
Cells(1, Target.Column + 2).Select
End If
End If
ErrHand:
Application.EnableEvents = True
End Sub

Gruß
Peter
Anzeige
Danke
15.09.2005 15:21:05
Johannes
Hallo Peter,
das letzte End IF wurde von Excel angemeckert, nachdem ich das weggelassen habe, lief es perfekt - herzlichen Dank.
Gruß
Johannes

104 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige