Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
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

Übertragen und löschen von Einträgen

Übertragen und löschen von Einträgen
08.02.2016 14:18:42
Einträgen
Hallo liebes Forum,
ich bräuchte ganz dringend eure Hilfe!!!
Es geht um die hochgeladene Datei. Ich habe die Aufgabe bekommen diese anzupassen und bin am verzweifeln...
Ich probiere die Problemstellung kurz zu umreißen.
Wenn man in die Tabelle mit der Bezeichnung "Qualifikationsmatrix" ein v einträgt, wird das entsprechende Datum in die Tabelle "Schulungskalender" überführt. Ist dieses Datum schon "älter" als 300 Tage wird ein automatischer Eintrag in der Tabelle "Monitor Nachschulung" erstellt. Das Problem dabei ist jetzt, dass bei jedem neuen Eintrag von v die Werte im "Monitor Nachschulung" erst einmal gelöscht werden und anschließend wieder eingetragen werden. Sprich die manuell angefertigten Einträge im "Monitor Nachschulung" werden jedes Mal gelöscht! Ist es möglich, dass man den Code so umstellt, dass neue Einträge einfach unten angefügt werden. Wird ein v gelöscht müsste aber trotzdem der entsprechende Eintrag im "Monitor Nachschulung" und im "Schulungskalender" gelöscht werden.
Ich hoffe das ist einigermaßen verständlich!!!! Wenn nicht gerne fragen, ich antworte so schnell wie möglich.
Hier ist der Link zur Datei!
https://www.herber.de/bbs/user/103368.xlsm
Ich hoffe es gibt einen Profi der das lösen kann!?
Ganz liebe Grüße,
eure ROXI

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übertragen und löschen von Einträgen
08.02.2016 17:46:53
Einträgen
Liebe Roxi,
ein Teil des Codes stammt ja von mir, aber es ist einige Zeit her, und ich habe keine allzu große Lust, mich erneut einzudenken.
Insofern mag ich Dir keine Lösung anbieten, das ist mir zu aufwendig, sondern nur einige Hinweise geben:
a) ich würde an Deiner Stelle den Code zuallererst im Hinblick auf eine höhere Übersichtlichkeit und vor allem Fehlertoleranz überarbeiten. Das gilt insbesondere für die Definition der Blattvariablen:
Es gibt dafür mehrere Möglichkeiten, nämlich:
- den "internen", sogenannten CodeName, zu verwenden, wie Du es in dieser Anweisung tust:

Finder = Tabelle2.Cells(Tz.Row, 2).Value

Noch lesbarer wäre es, Tabelle2 in einen sprechenderen Namen umzubenennen (im Eigenschaften-Fenster), hier z.B. in "QM" wie Qualifikationsmatrix.
- den "externen" Blattnamen, wie man ihn händisch in der Tabelle eingegeben hat, also z.B.

ActiveWorkbook.Worksheets("Protokoll Erstschulung").Visible = True

- schließlich gibt es den Weg über die Nr., so wie hier...

Set wksDst = ActiveWorkbook.Sheets(4)

... und die ist definitiv die Schlechteste, denn was ist, wenn ein Anwender irgendwelche Blätter verschiebt? Dann ist das ganze Programm hinüber.
b) Im Code zur QM hast Du nacheinander zwei Schleifen, in der Du die einzelnen Zellen des Target durchläufst. Das läßt sich alles in *einer* Schleife erledigen: das spart Variablen (ist ja eigentlich egal, sooo schnell überlastet das Excel nicht), und weniger Variablen bedeuten schlicht bessere Lesbarkeit!
Wenn man dann noch konsequent Codeblöcke einrückt, weiß man, was zusammengehört.
c) Offensichtlich hast Du nicht begriffen, warum ich eine Konstante eingeführt und die Werte mit "," getrennt habe:
Const nichtwenn = ",ü,eb,v,"
InStr(nichtwenn, "," & LCase(Tz.Value) & ",") = 0

sorgt dafür, daß definitiv nur die gewünschten Buchstabenkombinationen beachtet werden. Man muß dazu keine Konstante verwenden, klar, es geht auch so ähnlich, wie Du es machst,
InStr(1, UCase("ebsbü"), UCase(einzelZelle.Text)) = 0

aber eben nur so ähnlich, denn zusätzlich zu den gewünschten Kombination eb,sb und ü werden hier auch bs und bü, ebs, bsb, sbü usw. gefunden.
Ich persönlich werde die Datei erst wieder anfassen, wenn Du die Bezüge mit Blatt-Nummern ersetzt hast, weil es bei dem Umfang der Tabelle viel zu viel Gesuche ist, die Zusammenhänge nachzuvollziehen.
Deshalb stelle ich wieder auf "offen".
Schöne Grüße,
Michael

Anzeige
AW: Übertragen und löschen von Einträgen
09.02.2016 09:17:50
Einträgen
Hallo Michael,
danke schon mal für diene Tipps!
Es ist mir klar, dass der Code nicht ideal ist... Er setzt sich aus eigenem Stückwerk, Hilfe aus dem Forum etc. zusammen. Ich habe mich ehrlich gesagt ein bisschen übernommen. Die vorliegende Datei stellt für eine VBA Einsteigerin schon eien gewltige Herausforderung dar und langsam steigt mir das ein bisschen über den Kopf :(
Ich habe jetzt den Code einheitlich mit dem Blattnamen versehen! Vielleicht erbarmst du dich ja nochmal und schaust dir den relevanten Code nochmal an :o Ich würde mich auf jeden Fall freuen! Prinzipiell geht es eig nur um den Code in Modul1 (vom Schulungskalender aus zugreifend). Dieser löscht, wie bereits beschrieben, zunächst alle Einträge bevor er sie wieder einfügt.
Ich hoffe echt, dass mir jemand helfen kann, sonst kann ich meine Datei niemals in der Praxis verwenden und alle Mühe war umsonst...
Hier noch der Link zur überarbeiteten Datei: https://www.herber.de/bbs/user/103384.xlsm
Liebe Grüße,
eure ROXI

Anzeige
Gar nicht so einfach
09.02.2016 19:17:38
Michael
Hi Roxi,
ich habe mir Deine Tabelle mal etwas gründlicher angesehen.
Erst mal vielen Dank, daß Du meine Anregung in Sachen "Blatt-Referenz" umgesetzt hast - damit ist viel klarer, was wann wo passiert.
Zum eigentlichen, aktuellen Problem: ich kann es drehen und wenden, wie ich will, das Ganze hakelt daran, daß Excel nicht "automatisch wissen" kann, welche Einträge händisch vorgenommen wurden und welche via Makro.
Das habe ich doch richtig verstanden? Daß Du zusätzliche Eingaben per Hand machst?
Dann könnte man das mit einer Hilfsspalte im Nachschulungs-Monitor erledigen: "h" wie händisch, "m" wie Makro, und nur das löschen, wo "m" drinsteht...
Ein weiterer Punkt ist das, was wir letzten Dezember schon versucht haben, in den Griff zu bekommen: mit dem Change-Event (in der Q-Matrix) ist ja nur geänderte, nicht der vorherige Wert verfügbar, so daß man eigentlich jedes Mal, wenn die Zelle gelöscht wird, entweder wie damals ein undo machen muß, um zu sehen, was vorher drin stand, oder alle möglicherweise beteiligten Tabellen durchsuchen muß, ob ein Wert drinsteht, der evtl. gelöscht werden muß.
Könntest Du Dich evtl. mit dem Gedanken anfreunden, in QM statt change den doubleclick zu verwenden? Hier steht der alte Wert zur Verfügung, und man könnte dem Anwender eine Auswahl erlaubter Kürzel (sowie das Löschen des Eintrags) anbieten und dann NUR beim jeweils dazu passenden Blatt Änderungen vornehmen.
Die jetzige Logik sieht ja so aus:
Change in QM
veranlaßt Schreibaktion in anderen Blättern;
bei "v" wird Datum abgefragt und in den Schulungskalender übertragen
im Schulungskalender wird erneut ein Change aufgerufen, das
Werte in "Nachschulung" ändert - das ist vor allem sehr zeitaufwendig
und dann wieder ins Change-Ereignis von QM
zurückspringt, wo die msgbox ausgegeben wird.

Für meinen Geschmack gehört sich das alles "sauber" durchdacht und strukturiert in dem QM-Ereignis erledigt...
Eine grundsätzlich andere Möglichkeit wäre, diese ganzen Geschichten *nicht* laufend mitzuprotokollieren: mit Deiner vorhandenen Sub ListeErstellen durchforstest Du ja die kompletten Daten im Kalender, und das könnte man auch via Button aufrufen - analog bei den anderen "Monitoren".
Grundsätzlich hast Du Dir da einen ganz schönen Happen vorgenommen!
Meine dringendste Empfehlung wäre, mal einzuhalten und nachzudenken, wie das alles funktionieren soll.
Und zwar wegen der "Bedienung":
- teilweise sind nicht alle Text-Zeilen sichtbar, weil die Zeilenhöhe nicht paßt
- mache Dir Gedanken über die Zielgruppe:
-- durchschnittliche Anwender sind mit der Bedienung m.E.s überfordert.
Mit Anweisungen wie: "Sie müssen erst Makros ausschalten, bevor Sie eine Zeile einfügen" oder "stellen Sie sicher, daß beide Reiter markiert sind" machst Du Dir keine Freunde.
Wenn Ihr das verkaufen wollt, müßt Ihr Euch in einen "minimalen" Anwender hineinversetzen und das Ganze so gestalten, daß der damit zurechtkommt.
- die "Bedienung" ist sicher noch nicht fertig, ok, aber sie erinnert mich an die (schlechte) Doku vieler Programme, bei denen nur lapidar angegeben wird: die Maske sowieso kann Daten enthalten, die Maske sowieso auch, aber es fehlt eine konkrete Beschreibung, wann man was wo eingibt, und vor allem warum, um etwas Bestimmtes zu erreichen...
Um Dir das konkret zu vergegenwärtigen, empfehle ich Dir, gedanklich ein Drehbuch für einen Film zu entwickeln, mit dem Du ein Publikum von den Vorzügen Deines Programms zu überzeugen versuchst und ihm die Handhabung erklärst.
a) so sieht das Programm aus, wenn Sie es öffnen
b) wir nehmen uns mal ein paar Beispieldaten vor
c) wenn Sie die ersten Daten hier eingeben, passiert dort folgendes
usw. usf.
Damit nimmst Du gedanklich einen anderen Standpunkt ein, der Dir helfen wird, die einzelnen Schritte der Bedienung "von außen" nachzuvollziehen und vor allem deutlich zu verbessern.
Laß es mich mal so formulieren: Du hast eine aussagefähige Studie entwickelt, die alle wesentlichen Teile enthält. Jetzt bist Du an dem Punkt, wo Du die Studie analysieren und ein anwenderfreundlich(er)es Konzept entwickeln kannst (und mußt). Wenn das Konzept durchdacht und fertig ist, kannst Du Dich daransetzen, es zu programmieren (evtl. mit Hilfe eines Profis, wie z.B. hier in den Profilen zu finden).
Schöne Grüße,
Michael
P.S.: Nach all dem schlauen Gerede die Datei mit "m" in Spalte M - bitte zu testen:
https://www.herber.de/bbs/user/103412.xlsm
Die neue Sub Liste... fügt eine Zeile unten an, die überarbeitete, alte Version steht zusätzlich über Button zur Verfügung - beide im Modul1. Eine Prüfung auf "h" wie händisch habe ich weggelassen, das vergißt der Anwender sowieso nur.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige