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

Worksheet_Activate() / Worksheet_Change()

Worksheet_Activate() / Worksheet_Change()
18.04.2008 17:50:56
Uwe
Hallo!
Einmal mehr gibt`s Probleme. Bei einem inzwischen aufwendigen Programm gilt es, eine Vielzahl von Berechnungen durchzuführen. Derzeit geschieht das, sobald das Tabellenblatt aufgefrufen wird. [Worksheet_Activate()] Soweit so schlecht...
Zwingend notwendig ist`s jedoch, diese Berechnungen bereits bei Änderungen im Tabellenblatt durchzuführen. [Worksheet_Change()] So ich das jedoch versuche, geht`s schief. Beispielhaft hierzu einfach mal meine Absicht, Daten aus der Zelle C9 in die Zelle AQ9 zu übertragen:

Private Sub Worksheet_Change(ByVal Target As Range)
Range("C9").Copy Destination:=Range("AQ9")
End Sub


Die Anwendung soll sowohl unter Excel 2003 als auch unter Excel 2007 lauffähig sein. Bisher scheiterte jeglicher "Versuch" daran, das z.B. Excel 2007
schlicht nicht mehr reagiert, sobald ich das betreffende Tabellenblatt aufrufe, geschweige denn ändere.
Wo liegt der Fehler? Ich denke mal, das die ein oder andere Anweisung (ByVal Target As Range) nicht richtig ist... Für Hinweise, gar des "Rätsels Lösung" bin ich natürlich dankbar.
Darüber hinaus gibt`s in diesem Zusammenhang das zweite Problem. Die beschriebenen Berechnungen sollen für bis zu 50 Tabellenblätter, immer dem gleichen
Muster entsprechend, möglich sein. Ist es dazu zwingend erforderlich in jedes dieser Blätter den dann funktionierende Code zu kopieren? Spare ich mir denn
nicht (Speicher)platz so ich z.B. folgendes hinbekomme:


Private Sub Worksheet_Change(ByVal Target As Range)
Call VKS
End Sub


VKS dann in einem einzigen Modul für alle betroffenen Blätter hinterlegt, z.B.:
Sub VKS()
Dim Stunden As Date
Stunden = Range("A1").Value
Range("B1").Value = TimeSerial(Hour(Stunden) - (Minute(Stunden) >= 30), 0, 0)
End Sub


Dieser beabsichtigte "Verweis" von einem Private Sub an ein Sub funktioniert bisher nun so gar nicht...
Na, auch hier gilt "für sachdienliche Hinweise", äh, für des Rätsels Lösung sage ich schon mal hier schlicht daaanke!!!
Das soll`s dann aber gewesen sein.
Gruß und BESTEN Dank für Eure Mühe
Uwe

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

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_Activate() / Worksheet_Change()
18.04.2008 18:17:10
Erich
Hallo Uwe,
zu Problem 1:
Deine Change-Ereignis-Routine ändert eine Zelle des Blattes.
Dadurch wird die Change-Routine aufgerufen. Die ändert eine Zelle ...
Dieses Abtauchen in eine Endlosschleife kannst du vermeiden mit

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Range("C9").Copy Destination:=Range("AQ9")
Application.EnableEvents = True
End Sub

Zu Problem 2:
Wo steht die Routine VKS? Sie gehört in ein allgemeines Modul.
Schau dir doch auch mal die Ereignisprozedur Workbook_SheetChange an.
Wenn du hier im Archiv nach Workbook_SheetChange suchst, findest du sicher viele Beispiele.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Worksheet_Activate() / Worksheet_Change()
18.04.2008 21:15:54
Uwe
Hallo Erich,
Dir einmal mehr BESTEN DANK für Deine Hilfe. Aber...
Leider bietet mir Dein Vorschlag zwar die Möglichkeit, all meine Berechnungen unter Worksheet_Change() unterzubringen, ohne das Excel sich verabschiedet, jedoch wir der Aufruf des Tabellenblattes zur regelrechten Prozedur!!! Der Zugriff dauert im Durchschnitt 20 Sekunden. Und das bereits, wenn ich die Zellen AR9:AR39 derart ändern lassen möchte. Die Berechnung an sich ist dann wieder ruck zuck möglich. (nicht nachzuvollziehen von der Zeit her) Bleibt mir hier die Frage, wie ich den Aufruf der Tabelle wieder so wie gewünscht hinbekomme. (Ohne Eintragung unter Worksheet_Change() geht`s schnellerr als ein Wimpernschlag...) Aber bestimmt findet sich auch da der Grund, wieso, weshalb, warum?
Die Routine VKS steht in der Tat in einem allgemeinen Modul. Und damit eigentlich da, wo sie hingehört. Nur funktioniert der "Verweis" eben bisher nicht. Mal seh`n was mir da die Recherche zu Workbook_SheetChange bringt.
Wäre aber trotzdem nett, so Du mir bei den ein, zwei Fragen, die ich noch habe auch weiterhin zur Seite stehst. Gerne ebenso via Mai. Die dann doch bitte an uwe.siebers@online.de
Und jetzt? Na ganz einfach...
Erst einmal BESTEN Dank für Deine Hilfe, Deine Mühe
Uwe, Kleve (jetzt nicht sonnig, sondern dunkel)
PS: Die Hilfe brauchte ich wirklich DRINGEND, da (m)eine super gute Anwendung insgesamt kurz vor der Fertigstellung steht und in einem Betrieb mit 23 betroffenen Mitarbeitern zum Einsatz kommen soll. Das mit Wirkung zum 01.06.08

Anzeige
AW: Worksheet_Activate() / Worksheet_Change()
18.04.2008 21:48:00
Reinhard
Hi Uwe,
biste sicher daß du willst daß jeder weltweit deine Emailadrsse auch in 10 jahren noch lesen kann und dich anmailen soll?
Probiers mal so, beim If legste fest bei welchen Blättern nichts geschehen soll:

In "DieseArbeitsmappe":
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "DiesesBlattNicht" Or Sh.Name = "DiesesBlattNicht2" Then Exit Sub
Call VKS(Sh.Name)
End Sub
In Modul1:
Sub VKS(Blattname)
Dim Stunden As Date
Application.EnableEvents = False
Stunden = Worksheets(Blattname).Range("A1").Value
Worksheets(Blattname).Range("B1").Value = TimeSerial(Hour(Stunden) - (Minute(Stunden) >= 30), 0, _
0)
Application.EnableEvents = True
End Sub

Gruß
Reinhard

Anzeige
AW: Worksheet_Change()
19.04.2008 09:23:00
Erich
Hi Uwe,
so ganz verstehe ich nicht, was du schreibst.
"Der Zugriff dauert im Durchschnitt 20 Sekunden." Was meinst du mit "Zugriff"?
"Die Berechnung an sich ist dann wieder ruck zuck möglich." Was also dauert da lange?
Die Ursache muss wohl woanders liegen.
Wenn VKS in einem allgemeinen Modul steht, sollte der Aufruf unkompliziert funzen.
Was bedeutet "Nur funktioniert der "Verweis" eben bisher nicht"? Was passiert?
Gibt es eine Fehlermeldung?
Wenn du willst, kannst du mir deine Mappe mal schicken.
Meine Mailadresse findest du (wegen Spam etwas verklausuliert) unter
Forums-Seiten - Profile - Profilliste
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige

96 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige