Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
612to616
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
612to616
612to616
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Enterereignis nur durch User auslösen lassen

Enterereignis nur durch User auslösen lassen
18.05.2005 13:31:44
Vliegen
Hallo allesamt,
Hab mal wieder ein vermutlich einfaches Problem dass ich aber nicht gelöst bekomme...
Habe auf UF ein Multipage und ein Spreadsheet (mit mehreren Blättern). Je nach ausgewählter Page wird jeweils ein bestimmtes Spreadsheetblatt angezeigt. Ich löse diesen Spreadsheetblattwechsel über die Ereignisse Enter und Change des Multipage aus. Das klappt eigentlich gut. Hat aber einen Hacken. Denn auf den Pages sind ComboBoxen und Textfelder und sobald sich auf dem Multipage irgendwo etwas ändert wird das Change Ereignis ausgelöst. Also auch wenn eine des der CBs oder TBs verändert wird. Das Problem dabei ist dass der Rechner dann auch bestimmte andere Arbeitsgänge startet die ich aber nicht immer wünsche. Per Debugg und Haltpunkte habe ich festgestellt dass er dann jedesmal erst einmal auf dem jeweiligen Page diejenige CB oder TB aktiviert die in der Aktivierreihenfolge als erstes liegt. Wieso ist das so. Das führt nämlich in diesem Eingabefeld zu einem Auslösen des Enterereignisses welches wiederum ein Makro steuert das eigentlich nur dann laufen soll wenn der User das Eingabefeld selbst aktiviert hat aber nicht bei jedem change.
Könnte ich dem Enter-Code in diesem Eingabefeld eine selektive Bedingung zufügen damit das Makro nur ausgeführt wird wenn der User selber das Feld aktiviert hat aber nicht durch ein Changeereignis des Multipages.
Hoffe ihr versteht meine Frage. Gebe sonst gerne weitere Auskünfte.
Vielen dank !
Gruss,
François Vliegen
Was müsste dieser Beispielcode zusätzlich aufweisen ? Muss da irgendeine Boolean deklariert werden ?

Sub CB1_Enter
With Me
If .CB1 wurde aktiviert von User
Then
'was dann geschehen soll
'xxx
Else
Exit Sub
End If
End With
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Enterereignis nur durch User auslösen lassen
18.05.2005 13:35:53
Reinhard
Hallo François,
habs nur überflogen, bau doch in den Code ein
Doevents=false
...
Doevents=true
Gruß
Reinhard
AW: Enterereignis nur durch User auslösen lassen
18.05.2005 15:00:13
Vliegen
Danke für den Tipp,
versuch mal zu sehen ob mir das hilft.
Gruss,
Francois
AW: Enterereignis nur durch User auslösen lassen
18.05.2005 13:40:10
Boris
Hi Francois,
nicht nachvollziehbar.
...und sobald sich auf dem Multipage irgendwo etwas ändert wird das Change Ereignis ausgelöst...
Haben die einzelnen Controls auch irgendwelche programmierten Ereignisse?
Lad doch mal das Userform hoch.
Grüße Boris
AW: Enterereignis nur durch User auslösen lassen
18.05.2005 14:58:41
Vliegen
Hallo Boris,
Die UF und alle dazu notwendigen Tabellenblätter liegen deutlich über 300 kB. Kann die Sache also nicht hochladen. Der gesamte Code macht mehrere tausend Zeilen. Den Aufbau der UF zu begreifen muss und kann sich ja keiner hier antun.
Mag sein dass meine Annahme das Problem rühre vom Change-Ereignis des Multipages her falsch ist. Weiss dann aber nicht wo es dann herkommt.
Genauere Erklärung des Problems kann ich dir aber geben. Vielleicht hat jemand dann eine Idee welche Ursache dahinter steckt.
Wie gesagt jedes Page hat viele TB und CB. Diese Controls sind teilweise mit Ereignissen programmiert. Die verwendeten Ereignisse sind BeforeUpdate, Change, Enter, Exit.
Der Aufbau ist so dass auf einer Page in jeweils 5 CBs Auswahlen vorgeben. Ausgewählt werden Tierarten (CB1), die einer bestimmten Altersklasse angehören(CB2), die in bestimmten Stallbautypen stehen(CB3), bestimmte Mistarten scheissen(CB4), bestimmte Weidezeiten(CB5) haben. In einer TB muss die Anzahl der Tiere angegeben werden (also die Bestandesgrösse). Aus der Summe der CB-Auswahlen ergibt sich ein typischer Datensatz anhand dessen alle anderen Textfelder auf dem Page der aus der Datenbank eingelesen werden. Jedes der 5 CBS wird beim Enter-Ereignis gefüllt entsprechend den tatsächlich verbleibenden Auswahlmöglichkeiten. Das mache ich über ein Dim mit Variablen die auf Modulebene deklariert sind. Die CBs sind also gegenseitig abhängig. Bei Exit des CB5 wird dann die Datenbank ausgelesen und alle Textfelder bis auf eines werden befüllt. Läuft auch gut.
Damit eine Auswahländerung in einem CB korrekt läuft (wenn der User während sich im Laufe der Kriterienauswahl plötzlich umentscheidet) muss aber jede der 5 CBs auch eine Change Ereignis haben in dem alle folgenden Auswahlen und Listen erst einmal gelöscht werden. Wenn man beispielsweise die CB4 schon befüllt hatte und wieder zur CB1 wechselt müssen alle vorher getätigten Auswahlen in den andern (CB2, CB3, CB4, CB5) gelöscht werden damit sie der User neu gestaltet sein. Daher wird am Anfang des Change eines jeden CBs mittels clear und value="" die Auswahl und Liste der nach ihm folgenden gereinigt. Neue Auswahlenlisten bilden sich dann logischerweise bei Enter in den jeweiligen CBs.
Eine Sache ist dabei problematisch nach dem CB1 muss der User theoretisch eine Tierzahl in TBTierzahl eingeben. Die allerdings beeinflusst den Datenbankauswertung in den folgenden TBs nicht. Deshalb hat der User oft Tendenz diesen Wert erst später einzufüllen wenn die fünf CBs ausgefüllt und die Stammdaten vorgeschlagen sind. Oder er will sie später verändern weil sein Tierbestand sich verändert hat.
Wenn der User jetzt aber die Tiereanzahl ändert nachdem er die das CB5 verlassen hatte (und damit die Stammdatenauswahl also schon aktiv ist) dann passiert mein Problem. Beim Aktivieren des TBTieranzahl werden die 5 CBs gelöscht. Das ist aber natürlich falsch. Hab dann Haltepunkte überall hin gesetzt und festgestellt dass beim Anklicken des TBTieranzahl das Enter-Ereigniss der verschiedenen CBs1-5 ausgelöst wird und zwar eines nach dem andern entsprechend der Aktivierreihenfolge. Dort steht aber drin die Listeninhalte der CBs sollen geleert werden und ein Redim der Variablen wird gestartet. Damit werden die CBs alle leer nur weil man die Tierzahl verändern will.
Das ist mein Problem. Warum die verschiedenen Enter-Ereignisse der CBs ausgelöst werden verstehe ich nicht denn das steht nirgends im Code. Dachte daher es geschieht über das Multipage-Change Ereignis das auch immer eintrifft wenn sich was auf dem Multipage etwas verändert (denke ich zumindest).
Hast du eine Idee wo man sich die Schlange in den Schwanz beisst. Und wie ich das ganz lösen kann.
Hoffe es ist verständlich und ich war nicht zu lang aber kurzfassen ist nicht meine Stärke.
Vielen Dank.
François Vliegen
Anzeige
ui, da lese ich ja noch morgen dran *gg
18.05.2005 15:10:59
Reinhard
Hallo François,
vielleicht wäre es elegant und beiden Seiten sehr hilfreich, du bastelst ne kleine Datei mit ner userform und wenig Daten wo das was du schilderst auftritt und lädst die hoch....
Gruß
Reinhard
AW: ui, da lese ich ja noch morgen dran *gg
18.05.2005 16:45:18
Vliegen
Hallo Reinhard,
Hier ein Muster. Basteln hätte sehr lange gedauert. Hab deshalb die Sache so zusammengeschnitten dass gesagtes Problem-Ereignis eintritt. Hier der Link
https://www.herber.de/bbs/user/22901.zip
Beim Öffnen der Datei einfach den Button drücken.
Nicht von den 2000 Codezeilen erschrecken, relevant sind nur die Ereignisse der 5 CBs und des TBs mit den Spinbutton im oberen Bereich des ersten Pages auf dem Multipage.
Folgendes löst dann das Problem aus : Auf dem ersten Page KEINE Eingabe im TB oben rechts in der Ecke mit den Spinbuttons machen sondern nur in den 5 CBs Daten auswählen und nach der Auswahl im fünften Enter drücken. Dann werden wird aus der Datenbank eingelesen jede Menge Zeug eingelesen. Hat aber hier keine Bedeutung. Problem kommt jetzt : einfach einen der Spinbuttons drücken des TBs oben rechts drücken oder dort eine Eingabe machen und schon taucht das Problem auf denn die CBs werden dann alle gelöscht.
Wenn du sehen willst wie es zustande kommt einfach mal in jedes Enter-Ereignis der 5 CBs einen Haltepunkt im Code auf Höhe der With Anweisung einbauen. Das Auswählen wird dann etwas langwieriger. Aber bei Anklicken bleibt er genau im Enter-Ereignis des ersten CB hängen. Der dort stehende Code macht klar warum es nicht klappt.
Hoffe es geht so. Falls keiner damit zurecht kommt kann ich immer noch ein totales Muster einstellen aber das wird Arbeit hab also in einem ersten Schritt diese Option vorgezogen. Vielleicht klappt es ja so.
Vielen Dank und Gruss,
François
Anzeige
läuft nihct bei 9.0
18.05.2005 18:39:02
Reinhard
Hallo François,
Fehlermeldung beim Datei laden:"Ein Objekt konnte nicht geladen werden, da nicht auf diesem Computer" (ich nehme an weil ich nur version 9.0 habe oder es fehlt ein Verweis.
Bei Klick steht der Debugger bei FormCoordonneesEncodage.Show
dann findet er das spreadsheet nicht bei:
Private Sub Spreadsheet1_SheetActivate(ByVal Sh As OWC10.Worksheet)
Naja, wennn ich beidee Zeilen deaktiviere, tut sich gar nix :-)
Sorry, 10.0 habe ich erst in den nächsten Tagen/Wochen installiert.
Gruß
Reinhard
AW: läuft nihct bei 9.0
19.05.2005 10:36:28
Vliegen
Hallo Reinhard,
Wenn du willst kann ich dir den Ordner mit der OWC10.dll schicken. Wenn du die registrierst und die Verweise anpasst läuft die Sache (im Menu Programme, Ausführen, Pfad und regsver32).
Andereseits kann es aber auch sein dass du mir ohne dass die Sache läuft helfen könntest wenn ich den Fehler (mit Haltepunkten) eingrenze und du mir kurz sagst woran es liegen kann. Den jeweiligen Code siehst du ja wenn ich dir sage um welches Makro es sich im Modul handelt. Dass er beim Aktivieren des TBTierAnzahl in das Enter Ereignis der ersten Combobox springt und dass dort clear steht weiss ich ja. Nur warum er dort hin springt, dass ist mir noch nicht klar. Es muss was ganz dummes sein, nur leider sehe ich es nicht selbst. Die Ursache liegt auch nicht wie vermutet im Change Ereignis des Multipages denn da hab ich einen Haltepunkt gesetzt aber er bleibt dort nicht hängen. Welche allgemeinen Ereigisse könnte ich noch prüfen. Irgendwie muss doch das aktivieren des Textbox einen Wechsel in die Combobox bewirken. Nur wie ... ?
Irgendwie ist man blind wenn man selbst was entwickelt hat weil man immer wieder die gleichen Gedankengänge macht. Jemand von aussen springt der Fehler vielleicht eher in Auge. Ausserdem bin ich erst einige Monate damit beschäftigt VBA zu lernen und viele Tricks und Kniffe um Fehler zu finden sind mir noch unbekannt. Man muss die Logik der Sache ja erst mal verstehen. Vielleicht hab ich mich da auch an eine Sache rangetraut die noch eine Schuhgrösse zu gross für mich ist. Aber da muss ich jetzt durch.
Anzeige
AW: läuft nihct bei 9.0
19.05.2005 11:16:15
Vliegen
Hallo Reinhard,
Hab mal folgendes festgestellt.
Bevor das Enter Ereignis der TB ausgelöst wird ist er schon im Enter-Ereignis der ersten CB. Warum ? Keine Ahnung.
Hab dann die Aktivierungsreihenfolge geändert. Die CB war erstes Control in der Liste. Hab mal ein anderes hochgezogen und prompt kam es nicht mehr zum Fehler. Frage nun wie kann das sein ? Irgendwie ist das seltsam. Und problematisch den die CB sollte erstes Control in der Aktivierungsreihenfolge bleiben.
Hat jemand eine Idee was da schief läuft.
Gruss,
Francois
Problem gelöst ! Danke allen !
19.05.2005 12:25:46
Vliegen
Hallo Reinhard,
Hab das Problem gelöst. Der ganze Ablauf wurde durch eine banale Sache auf den Kopf gestellt.
Nach dem Einlesen der verschiedenen Textfelder aus der Datenbank befindet sich der Focus auf dem letzten eingelesenen Control. Das aber ist auf einem anderen Frame als die Textbox Tieranzahl die ich aktivieren will. Durch das Aktivieren wird also erst einmal der Frame aktiviert der dann seine Aktivierungsreihenfolge durchzieht und dort ist das erste Objekt eine der CBs die sich bei Enter selber löscht. Damit das nicht passiert muss nach dem Einlesen der Focus zurück auf das Frame mit den Comboboxen. Das hab ich gemacht. Und es läuft jetzt fehlerlos !
Wusste nicht dass Frames ein derartige vorfahrt in der Aktivierreihenfolge haben. Jetzt weiss ich es.
Allen die mir geholfen haben, oder es versucht haben möchte ich für ihre Mühe danken.
Gruss,
François
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige